Gzipの詳細は標準エラーに移動します。

Gzipの詳細は標準エラーに移動します。

詳細な出力をリダイレクトする場合は、通常、次のようにします。

[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

gzipstderrなぜ代わりに詳細な出力があるのですかstdout?スクリプトの最後にエラーファイルを確認し、ファイルに何も見つからない場合はクリーンアッププロセスが完了するため、スクリプトには非常に問題があります。

問題は、

  • gzipstderrなぜ代わりに詳細な出力があるのですか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

おすすめ記事