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.

관련 정보