사용법 메시지가 stderr 또는 stdout으로 이동해야합니까?


29

예를 들어 인쇄 된 사용법 메시지가

 command -?

유닉스 명령 중 stderr 또는 stdout으로 이동하면 왜됩니까? 사용자가 옵션에 실수를 한 경우 같은 장소로 가야합니까?


4
추가 사항 :-? --help 및 -h를 사용하십시오. --help 및 -h가 표준이기 때문에-? 쉘에 의해 해석 될 수 있습니다.
ctrl-alt-delor

1
@richard 이것은 훌륭한 포인트입니다. 재미있는 속임수 (bash) : touch -- -l; ls -?— 실제로 -lls에 전달 된 것처럼 긴 목록을 얻습니다 .
mattdm

@ 리차드 명령이 GNU 스타일의 긴 옵션을 허용하는지 또는 -h도움말 메시지 이외의 옵션을 지원할 수 있는지 모르는 경우 '-?'(따옴표 포함) 또는 -:오류 (및 사용법) 메시지를 얻을 수있는 좋은 기회를 제공합니다 :?사용하는 모든 항목에 유효한 옵션이 될 수 없습니다 getopt(3).
Stéphane Chazelas

@ 스테판 샤 첼라. 귀하의 의견을 올바르게 이해하면 프로그램 사용자의 관점에서 작성하는 것입니다.이 질문은 프로그램을 작성하는 사람의 관점에서 생각됩니다.
ctrl-alt-delor

답변:


50

stdout으로 이동해야하므로 다음을 입력 할 수 있습니다.

command --help | less

이는 Gnu 코딩 표준에서--help 권장됩니다 .

반면, 잘못된 옵션을 사용하거나 필수 인수를 생략 할 때 표시되는 사용법 메시지는 오류 메시지이므로 파이프 라인에서 다음 명령에 입력하지 않기를 원하므로 stderr로 이동해야합니다.

을 사용 --help하면 사용법 메시지가 명령의 정상 및 예상 출력입니다. 따라서 stdout으로 이동하므로 lessor 와 같은 다른 명령으로 파이프 될 수 있습니다 grep.

당신이 말할 때 command --bogus-option | other-command, 당신은 사용법 메시지가 stdout으로 가고 싶지 않습니다. 왜냐하면 그것은 예기치 않은 출력으로 처리되지 않기 때문 other-command입니다. 또한 출력이 --help몇 줄 이상인 경우 사용 오류 메시지에는 --help출력 요약 만 포함되어야 --help하며 추가 세부 사항 은 사용자에게 문의하십시오.


1
그렇지 않은 것에 따라 동일한 메시지에 대해 두 개의 다른 출력 스트림을 갖는 것이 약간 혼란 스럽습니까?

7
아마도, 그러나 반드시 같은 메시지는 아닙니다. 의 출력이 --help몇 줄 이상인 경우, 유효하지 않은 옵션에 의해 생성 된 사용 메시지 --help는 완전한 정보를 보는 데 사용하는 짧은 요약 일뿐 입니다.
CJM

4
+1-이것은 100 % 정확하며 여기에 동의 할 여지가 없습니다.
simon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.