出力を確認する必要があるスクリプトがありますand結果をファイルに記録します。最も単純な例は次のとおりです。
$ update-client > my.log
コマンドの実行中にコマンドの出力を確認できるようにしたいのですが、ファイルに記録することもできます。私はstderr
もログに記録するので、エラーストリームも確認しながらログを記録できるようにしたいと考えています。
update-client 2>&1 | tee my.log
2>&1は標準エラーを標準出力にリダイレクトし、Teeはその標準入力を標準出力とファイルに送信します。
更新されたファイルを監視するには、tailを使用します。上記のコマンドの後に&を追加して元のプロセスをバックグラウンド化する上記のコマンドを実行した後は、
$ tail -f my.log
継続的に更新されます。 (ファイルの実行がいつ終了したかは通知されないため、ログに何かを出力して終了を通知できます。Ctrl-cでテールを終了します)
別のオプションは、スクリプト内からブロックベースの出力キャプチャを使用することです(これが正しい技術用語であるかどうかは不明です)。
例
#!/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"
私はより多くのコントロールと柔軟性を持ちたいので、私はこの方法を好みます。
そのためにteeコマンドを使用できます。
command | tee /path/to/logfile
シェルへの書き込みなしの同義語は次のとおりです。
command > /path/to/logfile
追加(>>)してシェルに出力を表示するには、-aオプションを使用します。
command | tee -a /path/to/logfile
パイプはstdoutのみをキャッチすることに注意してください。stderrへのエラーはT字型のパイプでは処理されません。 (stderrからの)エラーをログに記録する場合は、以下を使用します。
command 2>&1 | tee /path/to/logfile
つまり、コマンドを実行し、stderrストリーム(2)をstdout(1)にリダイレクトします。それはT字型アプリケーションでパイプに渡されます。
askubuntuサイトでこれについて学んでください