合計をコンソール画面に出力し、stdout
そのstderr
いずれかをログファイルに保存できますか?
テストシェルスクリプトを作成しました。
#!/bin/sh
echo OUT! >&1
echo ERR! >&2
スクリプトを実行して画面に出力できます。
$./test
OUT!
ERR!
次のように出力し、stderr
ログstdout
ファイルとしてキャプチャできます。
$./test | tee 1>log
ERR!
$cat log
OUT!
stdout
何も出力できません。すべてをキャプチャして、次のようにログファイルに書き込むことができますstderro
。
$./test 2>&1| tee 1>log
$cat log
OUT!
ERR!
以下を使用して合計を出力し、stdout
すべてstderr
ログファイルにキャプチャできます。
$./test 2>&1 | tee log
OUT!
ERR!
$cat log
OUT!
ERR!
stdout
次のようにログファイルを出力できます。
$./test | tee 2>&1 log
ERR!
OUT!
$cat log
OUT!
私の質問は次のとおりです
- ファイルに出力して
stdout
キャプチャする方法は?stderr
(やってみたけど./test|tee 2>log
ダメだった) stderr
両方をファイルに出力してキャプチャするにはどうすればよいですか?
ベストアンサー1
- stdoutだけを出力してstderrをファイルにキャプチャするにはどうすればよいですか? (./test | tee 2> logを試しましたがうまくいきませんでした)
$ ./test 2>log
OUT!
$ cat log
ERR!
- どちらも出力してstderrをファイルにキャプチャするにはどうすればよいですか?
$ ./test 2>&1 >/dev/tty | tee log
OUT!
ERR!
$ cat log
ERR!
この式がより大きなパイプの一部である場合は、これを避けることをお勧めします/dev/tty
。 1つの方法はstdoutとstderrを置き換えることです。この交換を実行するには、次のように3番目のファイルハンドルを作成する必要があります。
$ exec 3>&1; ./test 2>&1 1>&3 | tee log; exec 3>&-
OUT!
ERR!
$ cat log
ERR!
最初のステートメントは、exec 3>&1
ファイルハンドル3を現在の標準出力(何でも)に割り当てます。その後、stderrはコマンド./test 2>&1 1>&3 | tee log
にパイプされ、stdoutはファイルハンドル3に送信されます。tee
最後に、円滑な管理のためにexec 3>&-
ファイルハンドル3を閉じます。
追加のメモとコメント
について:
次のようにしてstderrを出力し、stdoutをログファイルとしてキャプチャできます。
$./test | tee 1>log ERR! $cat log OUT!
次のように単純化できます。
$ ./test >log
ERR!
$ cat log
OUT!
また、以下に関連して:
何も出力できず、次のようにすべてのstdoutとstderroをログファイルとしてキャプチャすることができます。
$ ./test 2>&1| tee 1>log $ cat log OUT! ERR!
次のように単純化できます。
$ ./test >log 2>&1
$ cat log
OUT!
ERR!
または、bash
POSIXシェルを使用せずにを使用している場合は、より単純な形式を使用できます。
$ ./test &>log
$ cat log
OUT!
ERR!