tail을 사용할 때 "파일 잘림" 메시지를 억제합니다.

tail을 사용할 때 "파일 잘림" 메시지를 억제합니다.

저는 테일 로그 파일을 사용하고 tail -f messages.log있으며 이는 출력의 일부입니다.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Fusce eget tellus sit amet odio porttitor rhoncus. 
Donec consequat diam sit amet tellus viverra pellentesque. 
tail: messages.log: file truncated
Suspendisse at risus id neque pharetra finibus in facilisis ipsum.

tail: messages.log: file truncated파일이 자동으로 잘리는 경우가 표시 되지만, tail이 잘림 메시지 없이 출력만 표시하고 싶습니다.

사용해 보았 tail -f messages.log | grep -v truncated으나 여전히 메시지가 표시됩니다.

이 메시지를 표시하지 않는 방법이 있나요?

답변1

이 메시지는 다음 형식으로 출력됩니다.표준 에러모든 경고 및 오류 메시지와 같습니다.

모든 오류 출력을 제거할 수 있습니다.

tail -f file 2> /dev/null

또는 다음을 포함하는 오류 메시지만 필터링합니다 truncate.

{ tail -f file 2>&1 >&3 3>&- | grep -v truncated >&2 3>&-;} 3>&1

그러나 이는 종료 상태를 잃게 됨을 의미합니다 tail. 일부 쉘에는 pipefail파이프가 실패 시 종료 상태를 보고하도록 하는 옵션(활성화 사용)이 있습니다 set -o pipefail. 또한 /array에서 파이프라인의 다양한 구성 요소 상태를 보고할 수도 있습니다.tailzshbash$pipestatus$PIPESTATUS

zsh또는 를 사용하면 bash다음을 사용할 수 있습니다.

tail -f file 2> >(grep -v truncated >&2)

grep그러나 명령은 기다리지 않으므로 종료 후 오류 메시지(있는 경우)가 표시 될 수 있으며 쉘은 스크립트에서 다음 명령을 실행하기 시작했습니다 .tail

에서는 zsh다음을 작성하여 이 문제를 해결할 수 있습니다.

{ tail -f file; } 2> >(grep -v truncated >&2)

zsh이에 대해서는 설명서에서 설명합니다 info zsh 'Process Substitution'.

추가 문제가 있습니다 >(PROCESS). 외부 명령에 연결되면 상위 쉘이 PROCESS가 완료될 때까지 기다리지 않으므로 뒤따르는 명령이 완료될 결과에 의존할 수 없습니다. 문제와 해결방법은 1장에서 설명한 것과 같습니다.다수의존재하다리디렉션에 유의하세요::. 따라서 위 예의 단순화된 버전에서는 다음과 같습니다.

paste <(cut -f1 FILE1) <(cut -f3 FILE2) > >(PROCESS)

(MULTIOS는 관련되지 않습니다.) PROCESS는 상위 쉘에 관한 한 비동기적으로 실행됩니다. 해결책은 다음과 같습니다.

{ paste <(cut -f1 FILE1) <(cut -f3 FILE2) } > >(PROCESS)

여기의 추가 프로세스는 상위 셸에서 생성되어 완료될 때까지 기다립니다.

답변2

이는 파일 내용 때문에 발생합니다.

재정의됨 >- 추가된 내용이 없습니다.>>.

답변3

출력이 제거되지 않으면 grep표준 오류로 인쇄될 가능성이 높습니다. 이를 제거하는 가장 쉬운 방법은 간단히 버리는 것입니다.

tail -f messages.log 2>/dev/null

관련 정보