테일 파일이 아닌 서브루틴에서 스트림 grep

테일 파일이 아닌 서브루틴에서 스트림 grep

단순한 파일이 아닌 프로그램에서 연속 출력을 수집하기 위한 간단한 한 줄 코드가 있습니까?

PHPUnit이제 예를 들어 여기에 포함된 줄을 건너뛰고 싶습니다 . 명백한 이유로 다음 요지는 이를 수행하지 않습니다.

phpunit tests/cases | grep -v --line-buffered "PHPUnit"

사용자 정의 함수 등을 요구하지 않고 일반 oneliner로 수행할 수 있습니까?

답변1

phpunit 명령의 출력이 (PHP, Bash 쉘 등을 통해) 버퍼링되는 것처럼 들립니다 grep. 출력을 버퍼링 해제하고 응답성을 높이는 방법에는 여러 가지가 있습니다.

버퍼링 해제

당신은 사용해 볼 수 있습니다unbuffer명령은 다음의 일부입니다expect.

$ unbuffer phpunit tests/cases | grep -v --line-buffered "PHPUnit"

표준 버퍼

stdbuf명령을 사용하여 버퍼링을 비활성화 해 볼 수 있습니다 .

$ stdbuf -i0 -o0 -e0 phpunit tests/cases | grep -v --line-buffered "PHPUnit"

스위치 세부사항:

   -i, --input=MODE
          adjust standard input stream buffering

   -o, --output=MODE
          adjust standard output stream buffering

   -e, --error=MODE
          adjust standard error stream buffering

따라서 위의 내용은 STDIN, STDOUT 및 STDERR의 버퍼링을 0으로 설정합니다.

grep

Grep 자체가 버퍼링된 출력의 원인일 수 있습니다. 한 번에 한 줄의 출력만 버퍼링하도록 지시할 수 있습니다. (이미 언급했거나 발견했지만 이 Q&A를 보는 시청자가 거기에도 버퍼링이 있다는 것을 이해할 수 있도록 언급합니다.)

$ phpunit tests/cases | grep -v --line-buffered "PHPUnit"

관련 정보