詳細な出力をリダイレクトする場合は、通常、次のようにします。
[arif@arif test]$ rsync -v /home/arif/storage . 1> stdout
[arif@arif test]$ cat stdout
storage
sent 177 bytes received 35 bytes 424.00 bytes/sec
total size is 88 speedup is 0.42
しかし、同じことをするとgzip
他の結果が出ます。
[arif@arif test]$ gzip -v something 1> stdout 2> stderr
[arif@arif test]$ cat stdout
[arif@arif test]$ cat stderr
something: 0.0% -- replaced with something.gz
gzip
stderr
なぜ代わりに詳細な出力があるのですかstdout
?スクリプトの最後にエラーファイルを確認し、ファイルに何も見つからない場合はクリーンアッププロセスが完了するため、スクリプトには非常に問題があります。
問題は、
gzip
stderr
なぜ代わりに詳細な出力があるのですかstdout
?- この問題をどのように克服できますか?
ベストアンサー1
実際には、gzipが診断出力をstderrとして印刷する方が良いでしょう。そうしないと、診断とデータ(gzipの場合)を区別できないためです-c
。
各プログラムは、好きな場所に自由にメッセージを送信できます。gzipでstderrに圧縮
1060 /* Display statistics */
1061 if(verbose) {
1062 if (test) {
1063 fprintf(stderr, " OK");
1064 } else if (decompress) {
1065 display_ratio(bytes_out-(bytes_in-header_bytes), bytes_out,stderr);
1066 } else {
1067 display_ratio(bytes_in-(bytes_out-header_bytes), bytes_in, stderr);
1068 }
1069 if (!test && !to_stdout)
1070 fprintf(stderr, " -- %s %s", keep ? "created" : "replaced with",
1071 ofname);
1072 fprintf(stderr, "\n");
1073 }
回避策は、各ユーティリティの独自の条件に従ってそれを処理し、stderrが特定のgzipメッセージを予想するか、オプションを無視することです-v
。