Perl 스크립트를 사용한 프로세스 교체

Perl 스크립트를 사용한 프로세스 교체

나에겐 펄이 있어요스크립트이를 위해서는 다음 매개변수가 필요합니다.

count.pl OUTPUT_FILE INPUT_FILE

내가 원하는 것은 INPUT_FILE을 명시적으로 지정하는 대신 프로세스 대체를 사용하는 것입니다. 예를 들면 다음과 같습니다.

count.pl count.txt <(cat test.txt)

그러나 스크립트는 프로세스 교체로부터 어떠한 입력도 받지 못하는 것 같습니다.

내가 뭘 잘못했나요?

답변1

스크립트사용-T the-source-file파일에 포함되어 있는지 확인텍스트.

-T연산자는 파일의 시작 부분을 읽고 경험적 방법을 사용하여 텍스트처럼 보이는지 확인합니다. 그러나 파일이 <(...)이 예제와 같은 파이프인 경우 읽은 내용을 다시 읽을 수 없습니다.

다음을 통해 이를 재현할 수 있습니다.

$ perl -e '$file = shift; -T $file; open F, "<", $file; print while <F>' <(seq 1867)

1861
1862
1863
1864
1865
1866
1867

-T8KiB의 데이터가 출력에서 ​​소비되어 더 이상 루프 seq에서 읽을 수 없는지 확인하세요 .while <F>

=(...)여기에서는 파이프 대신 임시 파일을 사용하는 zsh 및 해당 프로세스 대체 양식을 사용할 수 있습니다 . 아니면 껍질 (... | psub -f)에 . fish또는 -T스크립트에서 호출을 제거하십시오. 또는 <<>>/와 함께 작동하고 <>(파일 인수가 전달되지 않은 경우 stdin에서도 작동함) stdout에서 출력되도록 스크립트를 다시 작성하십시오 . 스트리밍 방식으로 모든 파일을 처리하기 때문에 파일 이름을 매개 변수로 사용하는 요점을 정말로 이해하지 못합니다.

관련 정보