Perl 스크립트로 프로세스 대체
Sep 30 2020
다음 인수가 필요한 Perl 스크립트 가 있습니다.
count.pl OUTPUT_FILE INPUT_FILE
내가하고 싶은 것은 INPUT_FILE을 명시 적으로 지정하는 대신 프로세스 대체를 사용하는 것입니다.
count.pl count.txt <(cat test.txt)
그러나 스크립트는 프로세스 대체에서 입력을받지 못하는 것 같습니다.
내가 뭘 잘못하고 있니?
답변
7 StéphaneChazelas Sep 30 2020 at 18:31
스크립트 는-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
더 이상 루프가 읽을 수 없는 -T출력에서 8KiB를 소비 한 방법 을 확인하십시오 .seqwhile <F>
여기서 zsh와 =(...)파이프 대신 임시 파일을 사용하는 프로세스 대체 형식을 사용할 수 있습니다 . 또는 (... | psub -f)에서 fish쉘. 또는 -T해당 스크립트에서에 대한 호출을 제거하십시오 . 또는 해당 스크립트를 다시 작성하여 <<>>/ 와 함께 작동하고 <>(파일 인수가 전달되지 않은 경우 stdin에서도 작동하도록) stdout에 출력합니다. 나는 스트림 방식으로 모든 파일을 처리하기 때문에 파일 이름을 인수로 취하는 요점을 실제로 보지 못합니다.