スクリプト出力のコピーをファイルに送信する

スクリプト出力のコピーをファイルに送信する

STDOUT出力をとして印刷し、出力をディスクのファイルにコピー(ダンプ)するZshスクリプトがあるとします。

また、スクリプトは次のオプションで始まります。

set -o xtrace

これにより、実行されたコマンドが冗長に表示され、印刷されます。この出力をディスク上のファイルにキャプチャしたいと思います。

私の理解は、私がそうするなら

./my_script.sh > log.txt

STDOUTのみ送信されますが、log.txt端末でも出力を表示できるようにするにはどうすればよいですか?

私は次teeの内容を読みました。MULTIOSZshにオプションがありますが、どのように使用するのかわかりません。

私がするとき:

./my_script | tee log.txt

ターミナルで出力を見ることができますが、ファイルがlog.txtすべてをキャプチャできないようです(実際にはほとんど何もキャプチャしません)。

ベストアンサー1

スクリプトはstdoutと の出力を生成できstderr、これらのストリームの 1 つだけがログファイルに出力されます。

./my_script.sh | tee log.txtすべてを端末に出力しますが、stdoutログファイルにのみダンプします。

./my_script.sh > log.txt 2>&1逆に、すべてをログファイルにダンプしますが、画面には何も表示しません。

秘訣は2つを組み合わせることですtee

./myscript.sh 2>&1 | tee log.txt

stderrこれは2()をstdout1)にリダイレクトし、次ににパイプしてstdoutターミナルteeにコピーします。そしてログファイルに。

マルチzshOSに対応するものは次のとおりです。

./myscript.sh >&1 > log.txt 2>&1

つまり、stdoutを生のstdoutとlog.txtにリダイレクトしてから(内部的にパイプを介してこれに似たものとしてtee)、stderrもそこに(tee内部プロセスパイプと同じものとして)リダイレクトします。

おすすめ記事