bash:teeは実行後に改行文字を食べます。

bash:teeは実行後に改行文字を食べます。

私はスクリプトからコンソールとログファイルにstdoutとstderrを出力するためにteeを使って素晴らしい解決策を見つけました。

exec &> >(tee log.file)

問題は、時々ティーが改行を食べているように見えるということです。たとえば、終了する前に改行文字を印刷する終了時にトラップがあります。

trap "echo && exit 55" EXIT HUP INT QUIT KILL

^Cこれにより、シェルにスクリプトの実行中にユーザーが押すことができる場所ではなく、新しい行からプロンプトを印刷することができます。そのようなexec呼び出しがある場合は機能しません。

答え1

このメソッドはstderrをstdoutにリダイレクトし、それをteeにパイプします。もっと読みやすいと思います。

exec 2>&1 | tee log.file

私のコンピュータでこれをテストしましたが、「改行文字を食べる」問題はありません。

答え2

tee改行文字が受信される前に信号によって終了された可能性が高い。

関連情報