출력의 각 줄에서 즉시 명령을 실행하십시오.

출력의 각 줄에서 즉시 명령을 실행하십시오.

연속적인 출력 줄이 있는 소프트웨어(예: tcpdump 또는 tshark와 같은 트래픽 모니터)를 실행하는 명령을 실행할 때 해당 명령이 화면에서 4, 8, 12... 등과 같은 숫자를 계속 계산한다는 것을 발견했습니다.

command... | awk -F ' ' '{ANY COMMAND}'

내 bash 스크립트가 수천 줄이 아닌 각 출력 줄마다 작업을 수행하길 원합니다. 어떻게 해야 하나요?

많은 출력을 생성하는 소프트웨어를 실행할 때 좋은 예는 다음과 같이 파이프 연산자를 배치할 수 있다는 것입니다.

command... | awk -F ' ' '{print $1}'

0부터 1000+까지의 숫자를 계산한 다음 모든 올바른 정보를 한 번만 인쇄하지만 스크립트가 실행될 때 즉시 인쇄하지는 않습니다.

다음을 사용하여 출력을 파일에 넣으면:

command... > file.txt

...명령이 출력을 제공하면 데이터가 즉시 표시됩니다. 파이프 연산자를 사용할 때 지연의 원인이 무엇인지 궁금합니다.

답변1

이 프로그램( unbiffer)을 사용하여 프로그램 출력 버퍼링을 중지할 수 있습니다.

unbuffer command... | awk ......

이러한 "지연"의 이유는 UNIX 및 Linux의 대부분의 I/O 작업이 버퍼링되기 때문입니다.

관련 정보