このコマンドは、私のスクリプトの出力をログファイルに保存しません。
. 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にコードを書いたからです。