スクリプト出力ロギングでこのコマンドが機能するのはなぜですか?

スクリプト出力ロギングでこのコマンドが機能するのはなぜですか?

このコマンドは、私のスクリプトの出力をログファイルに保存しません。

. myscript.sh | tee -a log_file.log

ただし、次のコマンドはする出力をログファイルに保存します。

. myscript.sh 2>&1 | tee -a dash_log.log

2つ目はうまくいきますが、1つ目はうまくいかないのはなぜですか? AFAIKの唯一の違いは、bashにstderrをstdoutにリダイレクトするように指示し、stdoutに影響を与えないことです。ただし、最初のコマンドは標準出力の「エラーなし」バージョンをログファイルに保存しません。

重要な場合:AWSでホストされているUbuntu 12.04を使用しています。

編集:これは、wgetがメッセージを出力する方法について誤った仮定によるものです。バラよりhttps://stackoverflow.com/questions/13066518/why-does-wget-output-to-stderr-rather-than-stdoutそしてhttp://www.gnu.org/software/wget/manual/html_node/Logging-and-Input-File-Options.html

答え1

あなたのスクリプトは、出力のほとんどまたはすべてをstderrに書き込むようです。これはテストが簡単です

myscript.sh > std.out
myscript.sh 2> err.out

その後、各ファイルの内容を確認し、トレーニングを受けます。


疑わしいです。スクリプトの唯一の出力はwget呼び出しから来ます。

疑わないでください。テストするのは簡単です。

$ wget http://serverfault.com >std.out
--2013-09-09 07:06:25--  http://serverfault.com/
Resolving serverfault.com... 198.252.206.16
Connecting to serverfault.com|198.252.206.16|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51867 (51K) [text/html]
Saving to: “index.html.6”

100%[=================================================>] 51,867   231K/s  in 0.2s

2013-09-09 07:06:26 (231 KB/s) - “index.html.6” saved [51867/51867]

出力がまだ端末に記録されていることを確認してみてください。

 $ wget http://serverfault.com 2>err.out
 $

量子電気力学

wgetコマンドは、出力をstdoutの代わりにstderrに書き込みます。

答え2

コードを調べる必要があるかもしれませんが、これはstderrにコードを書いたからです。

関連情報