출력을 한 줄씩 리디렉션하는 거의 사용되지 않는 bash 파이프 유형에 대해 어딘가에서 읽은 기억이 납니다(나중에는 잊어버렸습니다). 즉, 출력을 마지막에 한 번 리디렉션하는 대신 각 개행 문자에 대한 출력을 리디렉션하고 수신 프로세스를 여러 번 실행합니다. 찾을 수 있는 모든 bash 문서를 살펴봤지만 이 "파이프"가 실제로 존재하는지 알 수 없습니다.
라인별 파이프라인 같은 것이 있나요? 물론 이 작업은 다른 방법으로도 쉽게 수행할 수 있지만 좀 더 우아한 방법이 있는지 궁금합니다.
답변1
xargs를 찾고 있다고 생각하십니까? 디렉토리에서 모든 .bak 파일을 찾아 삭제하고 싶다고 가정해 보겠습니다.
find . -name "*.bak" -type f -print | xargs /bin/rm -f
발견된 각 파일에 대해 결과를 파이프하고 파일을 삭제합니다.
http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/
답변2
나는 당신이 이 도구를 고려하고 있다고 생각합니다 unbuffer
. 이를 사용하여 출력이 한 명령에서 다른 명령으로 파이프될 때 발생하는 버퍼링을 비활성화할 수 있습니다.
다음과 같은 명령을 사용하면 페이지가 버퍼링될 때까지 출력이 표시되지 않습니다.
$ od -c /tmp/fifo | more
다음과 같이 자동 버퍼링을 비활성화할 수 있습니다.
$ unbuffer od -c /tmp/fifo | more
일반적으로 언버퍼는 STDIN에서 읽지 않습니다. 이는 unbuffer
특정 상황에서 사용을 단순화합니다. 파이프라인에서 사용 하려면 unbuffer
-p 플래그를 사용하세요.
$ process1 | unbuffer -p process2 | process3