コマンドライン/シェルのヘルプテキストの「標準」形式はありますか?


239

そうでない場合、事実上の標準はありますか?基本的に私はコマンドラインのヘルプテキストを次のように書いています:

usage: app_name [options] required_input required_input2
  options:
    -a, --argument     Does something
    -b required     Does something with "required"
    -c, --command required     Something else
    -d [optlistitem1 optlistitem 2 ... ]     Something with list

基本的にはさまざまなツールのヘルプテキストを読んだだけですが、ガイドラインのリストなどはありますか?たとえば、角括弧または括弧を使用しますか?間隔の使い方は?引数がリストの場合はどうなりますか?ありがとう!


8
GNUにはいくつかのヒントがあると思います。ほとんどのGNUユーティリティが何をしているのか見てみよう。
Basile Starynkevitch 2012年

1
@DanielPrydenその質問の答えは少し誤解を招くと思います。それは、どのスイッチがどのように--help見えるかではなく、どのスイッチが受け入れられるべきかを説明するリンクを提供します。しかし、どちらの質問もマージの良い候補です。
pmr

@pmr:同意します-おそらくmodが質問をマージできるでしょう。
Daniel Pryden

2
私はほとんどのGNUユーティリティが何をしているかを見て、それを他の方法で行います。
Yakov Galka 2017

回答:


159

通常、ヘルプ出力には以下が含まれます。

  • アプリの機能の説明
  • 使用構文:
    • [options]オプションの場所を示すために使用します
    • arg_name 必須の単数引数
    • [arg_name] オプションの単数引数
    • arg_name... 必要な引数が多数ある場合がある(これはまれです)
    • [arg_name...] 任意の数を指定できる引数の場合
    • arg_name小文字のヘビの場合、わかりやすい短い名前である必要があることに注意してください
  • うまくフォーマットされたオプションのリスト、それぞれ:
    • 短い説明がある
    • デフォルト値がある場合は表示する
    • 該当する場合、可能な値を表示
    • オプションが短い形式(例:)-lまたは長い形式(例:)を受け入れることができる場合、--listそれらの説明は同じであるため、同じ行に一緒に含めてください。
  • コマンドライン引数のソースとなる可能性のある設定ファイルまたは環境変数の場所の簡単なインジケーター、例えば GREP_OPTS
  • マニュアルページがある場合はそれを示し、そうでない場合は、より詳細なヘルプがどこにあるかを示す簡単なインジケーター

それは両方を受け入れることをいい形だと、さらに注意-hして--help、このメッセージをトリガする、コマンドライン構文アップユーザー台無し場合は、このメッセージを表示する必要があること、などを省いaが引数を必要としていました。


3
1つの必須引数の2つの形式がある場合はどうなりますか?たとえば、より標準的な言い方:usage: move (+|-)pixelsつまり、+ またはのいずれか -必須の場合?(私は2つの使用法の行を持つことができることを知っていますが、新しい引数ごとにそれらを2倍にするという考えが好きです。)標準ツールの例を思いつくことができますか?
Alois Mahdal、2013年

4
@AloisMahdal私は通常見る{a|b|c|...}の一つである単数の引数を必要とSysVの初期化/成り上がりサービススクリプト、のヘルプセクションではabc、例えば、などservice sddm私のシステム上の引数を出力しなくてUsage: /etc/init.d/sddm {start|stop|status|restart|try-restart|force-reload}。だから、ほとんどの人は、おそらく理解するであろうusage: move {+|-}pixels}例が与えられている場合は特に、:example: move +5
ブレーデンベスト

@JorgeBucaran彼らはステータス0で終了すべきではありませんか?ステータス2での終了は、無効なシェルコマンドの標準だと思います。
inavda

89

docoptを見てください。これは、コマンドライン引数を文書化(および自動的に解析)するための正式な標準です。

例えば...

Usage:
  my_program command --option <argument>
  my_program [<optional-argument>]
  my_program --another-option=<with-argument>
  my_program (--either-that-option | <or-this-argument>)
  my_program <repeating-argument> <repeating-argument>...

46

コマンドラインの使用法には標準的な構文はないと思いますが、ほとんどはこの規則を使用しています

Microsoft コマンドライン構文、IBMには同様のコマンドライン構文があります。


  • Text without brackets or braces

    次のように入力する必要がある項目

  • <Text inside angle brackets>

    値を指定する必要があるプレースホルダー

  • [Text inside square brackets]

    オプション品

  • {Text inside braces}

    必要なアイテムのセット。一つ選ぶ

  • 縦棒 {a|b}

    相互に排他的なアイテムのセパレータ。一つ選ぶ

  • 省略 <file> …

    繰り返すことができるアイテム


15

私たちは、ほとんどがPOSIX準拠のOSであるLinuxを実行しています。POSIX標準は次のとおりです。ユーティリティ引数構文

  • オプションでは、このような単一の英数字が続くハイフン、次のとおりです-o
  • オプションには引数が必要な場合があります(引数はオプションの直後に指定する必要があります)。たとえば、-o argumentまたは -oargument
  • 引数を必要としないオプションはハイフンの後にグループ化できるため、たとえば-lstと同等-t -l -sです。
  • オプションは任意の順序で表示できます。したがって、-lstと同等-tlsです。
  • オプションは複数回表示できます。
  • オプションは他の非オプション引数に先行します:-lst非オプション。
  • --引数には、オプションを終了します。
  • この-オプションは通常、標準入力ストリームの1つを表すために使用されます。

2
GNU / Linuxでの使用がこの標準に厳密に従っていないことは一般的です。man aptitudeこれを(他のものとともに)出力するeg を実行しますaptitude [<options>...] {add-user-tag | remove-user-tag} <tag> <packages>...。代替の必須コマンドをバインドするための{および}が含まれています。(と)は、docoptで使用されているのと同じように使用できると思います。
jarno 2016年

提供されたリンクがダウンした場合、この回答はあまり役に立ちません。リンクされたドキュメントの重要な部分を回答自体に要約できますか?
domsson

11

Microsoftには独自のコマンドライン標準仕様があります。

このドキュメントは、コマンドラインユーティリティの開発者を対象としています。まとめると、私たちの目標は、一貫性のある構成可能なコマンドラインのユーザーエクスペリエンスを提供することです。これにより、ユーザーはコアコンセプトのセット(構文、命名、動作など)を学習し、その知識を多数のコマンドセットでの作業に変換できます。これらのコマンドは、標準化されたデータストリームを標準化された形式で出力でき、出力テキストのストリームを解析する負担なしに簡単に構成できるようにする必要があります。このドキュメントは、シェル、ユーティリティのセット、またはコマンド作成テクノロジの特定の実装に依存しないように作成されています。ただし、付録J-Windows PowerShellを使用したMicrosoftコマンドライン標準の実装では、Windows PowerShellを使用してこれらのガイドラインの多くを無料で実装する方法を示しています。


8
Microsoftはほとんどのユーティリティに恐ろしいコマンドラインヘルプを提供しています。すべてがひどいため、Powershellはカーペットの下に「通常の」コマンドラインを非表示にしました。
Camilo Martin

25
マイクロソフトの基準を参照しているからといって、その回答は反対票を投じるべきではないと思います。「すべてがひどい」は主観的な意見です。同じように、UNIXのコマンドラインはひどく醜いと言われるかもしれませんが、そのような意見は控え、専門家にしましょう。
ディマ

2
同意された、それがこの回答が反対票を投じられるべき理由ではない。反対票が投じられた場合、それは、a)引用されているドキュメントのセクションが目前の質問に答えていない、b)リンクされているドキュメントが関連性がないと思われるためです。この質問は、コマンド使用法の概要を伝えるために使用される構文に重点を置いた「ヘルプテキスト」の標準があるかどうかを尋ねます。文書は、(例えばサポートされている必要があり、このような構文を差し出すませんが、むしろPowerShellの生態系に一般的には良いコマンドラインアプリケーションを構築する方法を-?-Help-Versionなど、)。IMOスティーリーウィングの答えは、マークに近いです。
Mark G.

9

GNU Coding Standardは、このようなものの良いリファレンスです。このセクションでは、の出力を扱います--help。この場合、それほど具体的ではありません。短いオプションと長いオプション、および簡潔な説明を示す表を印刷することで、おそらく間違いはありません。読みやすくするために、すべての引数の間隔を正しく設定してください。ツールのmanページ(および場合によってはinfoマニュアル)を提供して、より詳細な説明を提供することをお勧めします。


0

はい、あなたは正しい軌道に乗っています。

はい、角括弧はオプション項目の通常のインジケーターです。

通常、スケッチしたように、上部にコマンドラインの概要があり、その後に詳細が続き、理想的には各オプションのサンプルがあります。(例では、各オプションの説明の間に行が表示されていますが、これは編集の問題であり、実際のプログラムは空白行のないインデントされたオプションのリストを出力することを想定しています。これはどの場合でも従うべき標準です。)

新しい傾向(これに対処するPOSIX仕様があるかもしれませんか?)は、ドキュメントのマンページシステムが削除され、マンページに含まれるすべての情報がprogram --help出力の一部として含まれるようになりました。この補足には、より長い説明、概念の説明、使用例、既知の制限とバグ、バグの報告方法、および関連コマンドの「参照」セクションが含まれます。

これがお役に立てば幸いです。


4
ダメダメダメ。コマンドには、使用の完全な詳細なリファレンスを含むマンページがあり-h|--help、要約されたリファレンスでなければなりません。HTMLまたは情報ページに、より包括的なドキュメント(チュートリアルなど)を含めることもできます。しかし、マンページはそこにあるはずです!
ninjalj

@ninjaljに同意しますが、先ほど言ったように、「新しい傾向」です。つまり、私が使用している2つのシステム、UWinとMinGWの両方にドキュメントが組み込まれているということです。埋め込みドキュメントには、特にこのユーザーが提案しているような小さなユーザーレベルのスクリプトのための場所があると思います。彼はnroffと.infoを学ぶ必要がありますか?しかし、私たちを正直に保つのは良いことです。あなたのコメントとすべての幸運に感謝します。
シェルター2012年

個人的にsomeCommand --helpは、シェルで入力するときに必要なのは、引数が入力される正確な順序を少し思い出させることlessだけであり、画面全体に広がるテキストの巨大な帯ではなく、すべてを確認するためにパイプでつなぐ必要があります。マンページは、ヘルプテキストではなく、詳細な説明を置く場所にする必要があります。
AJMansfield 2013年

0

私は例としてタールのような公式プロジェクトに従います。私の意見では、メッセージを助けます。できるだけシンプルでわかりやすいものにする必要があります。使用例も良いです。「標準的なヘルプ」は実際には必要ありません。


tar... について誰かがtarのような何でも神の効用をするつもりなら、短いスイッチを覚えやすいものにして、「使用例」セクションをに含めてください--help。tarの説明を見るときの90%は、単純なを抽出するためのものtar.gzです。
Camilo Martin

' 「標準的なヘルプ」は実際には必要ありません。'私たちが使用するもののほとんどに「実際のニーズ」はありますか?それとも、私たちの生活をより簡単にするためにそこにあるのでしょうか?オプションを表現するための合意された方法があることは、読者だけでなく、たとえば、任意のコマンドラインユーティリティを制御できるGUIを構築し、オプションを設定するためのコントロールを提供したい場合にも役立ちます。まだ考えていないより良い使い方があるでしょう。
underscore_d
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.