末尾を使用するときに「ファイルが切り捨てられた」メッセージを抑制します


11

私は使用してログファイルをテーリングして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が、とにかくメッセージが表示されます。

このメッセージを抑制する方法はありますか?

回答:


15

そのメッセージは、すべての警告およびエラーメッセージと同様にstderrに出力されます。

すべてのエラー出力をドロップできます。

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 pipefailtailがあります。zshまたbash、パイプラインの個々のコンポーネントのステータスを$pipestatus/ $PIPESTATUS配列で報告することもできます。

zshbash、あなたが使用することができます。

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が完了するのを待たないため、直後のコマンドは結果の完了に依存できません。セクションで説明したように、問題と解決策は同じですMULTIOSノートリダイレクト::。したがって、上記の例を簡略化したバージョンでは、次のようになります。

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

(MULTIOSは関係しないことに注意してください)、PROCESSは、親シェルに関する限り非同期で実行されます。回避策は次のとおりです。

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

ここでの追加プロセスは、その完了を待つ親シェルから生成されます。


( )複雑なコマンドよりもサブシェルを好む理由はあります{ }か?
トム・ヘイル

@TomHale。正当な理由はありません。編集を参照してください。ありがとう。
ステファンChazelas

2

grepが出力を取り除かない場合、それはおそらく標準エラーに出力されています。それを取り除く最も簡単な方法は、単にそれをダンプすることです:

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

1
トリックを行いますが、他のメッセージも抑制します。
Bas Peeters

はい、@StéphaneChazelasのソリューションはより複雑ですが、関連するメッセージのみを無視します。
l0b0 2014年

1

このエラーの原因を修正できるかどうかを確認してください。これは、「>>」ではなく「>」を上書きしてファイルに書き込むために発生しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.