Hello stackpeople!while 루프 내에서 Perl bash 명령을 사용하면 말도 안되는 소리가납니다.
나는 결과를 해결하고 온라인으로 cgi 파일에 표시 할 2 가지가 있습니다.
을 [:
A)과 같아야 각 폴더 안에
결과를 index.html을의 나이를 결정 주어진 경로
B) 모든 foldernames를 얻을 수 번호] [폴더 이름] [파일]
이 cgi 페이지는 perl이 설치된 solaris 서버에서 실행됩니다. 5.8.4
내 솔루션은 bash와 perl의 조합입니다. 이 보여 이제 펄 코드를
#!/bin/bash
#
find /test/ -type d | sed -e 's/^.*\///'
이 날에/테스트의 모든 foldernames의 좋은 목록을 제공/
: 내가 쓴) bash는 스크립트를 문제 A) (폴더 이름을 해결하기 위해 브라우저에서 출력 :
#Establish a pipeline between the bash and my script.
my $bash_command = '/test./foldernames.bash';
open(my $pipe, '-|', $bash_command) or die "Can't open pipe: $!";
# initialize variables
my $foldername = "";
my $i = 0;
# Process the output from bash command line by line.
while (my $line = <$pipe>)
{
$foldername = $line;
$i = $i+1;
print" <tr><td>$i</td><td>$foldername</td></tr>";
}#end while
이것은 작동합니다! 나는 [번호]와 [폴더 이름]으로 멋진 테이블을 얻을 것이다! 이제 까다로운 부분이 있습니다! 또한 각 폴더에있는 index.html의 날짜를 원합니다.
ls -ltr /test/folder1/*.html | tail -1 | awk '{printf"%3s %1s %s\n",$6, $7, $8}`
이 나에게 완벽한 출력을 제공 : 그러므로 내가 다른 bash는 스크립트가 10시 56분년 2 월 (22)는 지금 내 테이블에이 정보가 필요합니다. 나는 while 루프에서 내 펄 스크립트에이 줄을 추가 한 : 나는 문자열로 폴더 이름을 추가 할 때이 완벽하게 작동
$timestamp = `ls -ltr /test/folder1/*.html | tail -1 | awk '{printf"%3s %1s %s\\n",\$6, \$7, \$8}`;
. 내가 교환하자마자 폴더 1과 $ foldername 나는 말도 안되는 "ls"정보를 얻을 것이다.
왜 그렇습니까?
편집은 : 지금은 사용했다 :
use File::stat;
use Time::localtime;
my $timestamp = ctime(stat("/test/folder1")->mtime);
이것은 LS 출력을 구문 분석에 비해 방법이 더 안전합니다. 하지만 여전히 $ foldername에 문제가 있습니다. 나는 길이 함수를 사용하여 $ Foldername 길이를 결정했습니다.
$의 폴더 이름은 (7)의 길이를 가지고 있지만, 문자열 출력은 6 문자가 있습니다 토마토를
그래서 잘라을 시도했습니다/항상 같은 결과는 $ 폴더 이름을 씹는 : 7 개 문자를!
File :: stat; 사용 시간 :: localtime; my $ timestamp = ctime (stat ("/ test/folder1") -> mtime); 이 방법은 ls 출력을 구문 분석하는 것보다 훨씬 안전합니다. 하지만 여전히 $ foldername에 문제가 있습니다. 길이 함수를 사용하여 $ Foldername 길이를 결정했습니다. $ foldername은 길이가 7이지만 문자열 출력에는 6 개의 문자 만 있습니다. tomato 그래서 Chop/chomp에 $ foldername을 시도했지만 항상 같은 결과를 얻었습니다 : 7 개의 문자! – Ajin