使用法メッセージはstderrまたはstdoutに送信する必要がありますか?


29

たとえば、印刷される使用法メッセージ

 command -?

Unixコマンドのstderrまたはstdoutに移動し、なぜですか?ユーザーがオプションを間違えた場合、同じ場所に移動する必要がありますか?


4
追加の注意:-を使用しないでください?--helpと-hを使用する--helpと-hが標準であり、-?シェルによって解釈されます。
ctrl-alt-delor

1
@richardこれは素晴らしい点です。楽しいトリック(bashで):touch -- -l; ls -?—実際-lにlsに渡したかのように長いリストを取得します。
mattdm

@リチャード。コマンドがGNUスタイルの長いオプションを受け入れるか、-hヘルプメッセージ以外のオプションをサポートするかどうかわからない場合は、'-?'(引用符で)または-:エラー(および使用法)メッセージを受け取る良い機会を与えます:を使用?する場合は有効なオプションにできませんgetopt(3)
ステファンシャゼル

@Stephane Chazelas。私があなたのコメントを正しく理解していれば、あなたはプログラムのユーザーの観点から書いています。この質問はプログラムを書いている誰かの観点からだと思います。
ctrl-alt-delor

回答:


50

stdoutに移動する必要があるため、次のように入力できます。

command --help | less

これはのGnu Coding Standards--helpでも推奨されてます。

一方、無効なオプションを使用したり、必要な引数を省略した場合に表示される使用法メッセージはエラーメッセージであり、パイプラインの次のコマンドにフィードされないようにするため、stderrに移動する必要があります。

を使用する--help場合、使用法メッセージはコマンドの通常の予想される出力です。したがって、それはstdoutに送られるため、lessまたはなどの別のコマンドにパイプできますgrep

と言うときはcommand --bogus-option | other-command、使用法メッセージがstdoutに送られないようにしますother-command。これは、予期しない出力であり、によって処理されるべきではないためです。また、の出力--helpが数行以上の場合、使用法エラーメッセージには--help出力の概要のみが含まれ、--help追加の詳細についてはユーザーを参照する必要があります。


1
同じメッセージに対して2つの異なる出力ストリームを使用することは、多少の混乱を招きます。

7
おそらく、しかし、それらは必ずしも同じメッセージではありません。の出力が--help数行を超える場合、無効なオプションによって生成される使用法メッセージ--helpは、完全な情報を表示するために使用することを示す短い要約である必要があります。
cjm

4
+1-これは100%正確であり、ここに不一致の余地はありません。
サイモン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.