"tr"과 함께 "tail -f"를 사용하면 "cut"이 중단됩니다.

"tr"과 함께 "tail -f"를 사용하면 "cut"이 중단됩니다.

채팅 로그 파일을 일부 음성 출력으로 파이프하려고 하는데 타임스탬프 제거 cut및 특수 문자 제거를 사용하고 싶습니다 tr. 불행히도 이것은 cut다음과 함께 사용하면 중지되는 것 같습니다.tail -ftr

//works
$ tail /path/to/chatlogs | cut -b18- 
test
test

//works, too
$ tail /path/to/chatlogs | tr -C -d  '[:alnum:][:cntrl:] '
test
test

// does not work
$ tail -f /path/to/chatlogs | tr -C -d  '[:alnum:][:cntrl:] ' | cut -b18-
//no output

왜? 이 문제를 어떻게 해결할 수 있나요?


파이프가 두 번 들어올 때에도 중단됩니다 cut.

$ tail -f file | cut -b5- | cut -b5-
//no output

답변1

사용 중인 구문은 의 새 입력만 처리합니다 /path/to/chatlogs. 명령을 실행하고 새 항목을 기록해 /path/to/chatlogs보고 결과가 무엇인지 확인하거나 다음을 시도해 보십시오.

tail -1000f /path/to/chatlogs | tr -C -d  '[:alnum:][:cntrl:] ' | cut -b18-

또한 마지막 1000개 행도 처리합니다.

"매달려 있는" 부분은 실제로 tail파이프를 통해 추가 입력이 전달되기를 기다리는 프로세스입니다.

tr명령에서 버퍼링을 비활성화 하려면 다음을 사용하십시오.

tail -f /path/to/chatlogs | stdbuf -i0 -oL tr -C -d  '[:alnum:][:cntrl:] ' | cut -b18-

위의 내용은 다음에서 사용됩니다.파이프라인에서 버퍼링 끄기

답변2

여러 파이프를 사용할 때 stdio 버퍼링에 문제가 있습니다.

문제에 대한 자세한 설명은 다음 위치에 있습니다.http://www.pixelbeat.org/programming/stdio_buffering/그리고 해결책이 없는 것 같습니다.

관련 정보