한 스크립트의 출력을 가져온 다음 이 입력을 grep으로 파이프하고 grep의 출력을 다른 스크립트로 파이프합니다.
./script1 | grep 'expr' | ./script2
그러나 두 번째 스크립트는 입력을 전혀 받지 못합니다. 마찬가지로, script2
with cat
와 script1
with를 바꾸면 아무것도 인쇄되지 않습니다 ping
.
ping localhost | grep localhost | cat
grep
내가 다음으로 바꾸면 awk
:
ping localhost|awk '{print $1}'|cat
무슨 일이야?
답변1
grep
버퍼링입니다(출력이 터미널이 아니라고 판단하기 때문입니다. 엄밀히 말하면 이는 C 라이브러리 동작입니다).
이 기능을 비활성화하려면 다음을 실행하십시오 unbuffer -p
(표준 입력에서 데이터를 읽어야 -p
함).unbuffer
ping localhost | unbuffer -p grep localhost | cat
또는 grep
행별 버퍼링을 지정합니다(지원되는 경우).
ping localhost | grep --line-buffered localhost | cat