私はスクリプトからコンソールとログファイルに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
改行文字が受信される前に信号によって終了された可能性が高い。