29

出力を確認して結果をファイルに記録する必要があるスクリプトがいくつかあります。最も簡単な例は次のとおりです。

$ update-client > my.log

コマンドの実行中にコマンドの出力を確認できるようにしたいだけでなく、ファイルにログを記録させたい。私もログstderrに記録するので、エラーストリームも表示しながらログに記録できるようにしたいと思います。

4

4 に答える 4

53
update-client 2>&1 | tee my.log

2>&1は標準エラーを標準出力にリダイレクトし、teeはその標準入力を標準出力とファイルに送信します。

于 2010-07-09T19:07:04.190 に答える
7

テールを使用して、ファイルが更新されるのを監視します。上記のコマンドの後に&を追加して、元のプロセスのバックグラウンドを設定します。上記のコマンドを実行した後は、次を使用してください。

$ tail -f my.log

継続的に更新されます。(ファイルの実行が終了したことは通知されないため、ログに何かを出力して終了したことを通知できます。Ctrl-cを押してテールを終了します)

于 2010-07-09T19:09:00.720 に答える
5

そのために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サイトでこれについて学ぶ

于 2016-02-18T07:54:11.157 に答える
4

別のオプションは、スクリプト内からブロックベースの出力キャプチャを使用することです(それが正しい技術用語であるかどうかはわかりません)。

#!/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"

私はより多くの制御と柔軟性を持っているのが好きです-それで私はこの方法を好みます。

于 2012-08-15T19:31:12.310 に答える