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

gzip为什么go to的详细输出stderr而不是stdout?这对于脚本编写来说是非常有问题的,因为在脚本末尾,会检查错误文件,如果在文件上发现任何内容,则会完成清理过程。

问题是,

  • gzip为什么go to的详细输出stderr而不是stdout
  • 我怎样才能克服这个问题?

答案1

实际上,gzip 将诊断输出打印到 stderr 更好,因为否则您将无法区分诊断和数据(在 的情况下-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选项。

相关内容