出力を確認して結果をファイルに記録する必要があるスクリプトがいくつかあります。最も簡単な例は次のとおりです。
$ update-client > my.log
コマンドの実行中にコマンドの出力を確認できるようにしたいだけでなく、ファイルにログを記録させたい。私もログstderr
に記録するので、エラーストリームも表示しながらログに記録できるようにしたいと思います。
update-client 2>&1 | tee my.log
2>&1は標準エラーを標準出力にリダイレクトし、teeはその標準入力を標準出力とファイルに送信します。
テールを使用して、ファイルが更新されるのを監視します。上記のコマンドの後に&を追加して、元のプロセスのバックグラウンドを設定します。上記のコマンドを実行した後は、次を使用してください。
$ tail -f my.log
継続的に更新されます。(ファイルの実行が終了したことは通知されないため、ログに何かを出力して終了したことを通知できます。Ctrl-cを押してテールを終了します)
そのためにteeコマンドを使用できます。
command | tee /path/to/logfile
シェルに書き込まない場合の同等のものは次のようになります。
command > /path/to/logfile
追加(>>)してシェルに出力を表示する場合は、-aオプションを使用します。
command | tee -a /path/to/logfile
パイプはstdoutのみをキャッチし、stderrへのエラーはティー付きパイプでは処理されないことに注意してください。(stderrからの)エラーをログに記録する場合は、次を使用します。
command 2>&1 | tee /path/to/logfile
つまり、コマンドを実行し、stderrストリーム(2)をstdout(1)にリダイレクトします。それはティーアプリケーションでパイプに渡されます。
askubuntuサイトでこれについて学ぶ
別のオプションは、スクリプト内からブロックベースの出力キャプチャを使用することです(それが正しい技術用語であるかどうかはわかりません)。
例
#!/bin/bash
{
echo "I will be sent to screen and file"
ls ~
} 2>&1 | tee -a /tmp/logfile.log
echo "I will be sent to just terminal"
私はより多くの制御と柔軟性を持っているのが好きです-それで私はこの方法を好みます。