저는 테일 로그 파일을 사용하고 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에서 파이프라인의 다양한 구성 요소 상태를 보고할 수도 있습니다.tail
zsh
bash
$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