web-dev-qa-db-ja.com

Linuxコマンドラインスイッチと引数の標準はありますか?

これは、どの言語やパーサーよりもプログラムの呼び出しに関するものです(ただし、パーサーライブラリの選択はこれに依存するはずです)。参照してください、私は多くのLinuxコマンドラインユーティリティを使用しました。そして、明らかなパターンがいくつかあります。 「-」は短いオプションの単一の文字の前にあり、引数を取らない複数のオプションは組み合わせることができ、「-」はオプションの長いバージョンの前に続きます。

ただし、場合によっては、大文字が反転オプションに使用されます。したがって、「-d」はデーモンとして実行することを意味しますが、「-D」はnotデーモンとして実行することを意味します。 (必要ない場合にオプションを単に省略しないのはなぜですか?それは明確ではありませんが、実際にはかなり一般的であるため、何らかの理由があるはずです。) 「-d」がデーモンとして実行されている場合、「-D」はデバッグモードを有効にする可能性があります。この背後に何らかの包括的なプリンシパルがあり、どれを選択するのが最適ですか?それとも、「何でも動作する」だけを扱っていますか?

引数を伴うオプションに加えて(またはその代わりに)単独の引数を取るコマンドもあります。 cpはこの良い例です。まれにしか使用されないトグルを除き、最後に受け取る引数は宛先であると推定され、オプションリストと宛先の間の引数はソースであると推定されます。引数で明示的なオプションフラグを使用する代わりに、そのような順序に依存することが「大丈夫」な場合の経験則はありますか?

47
DigitalMan
33
ApriOri

ESRは、彼の著書「The Art of UNIX Programming」でこれに関する多くの情報を収集しています。これがスニペットです。

-a
すべて(引数なし)。 GNUスタイルの--allオプションがある場合、-aが同義語ではないことはまったく驚くべきことです。例:fuser(1)、fetchmail(1)。

Tar(1)のように追加します。多くの場合、これは削除のために-dとペアになります。

-b
バッファまたはブロックサイズ(引数付き)。クリティカルバッファサイズを設定するか、(ストレージメディアのアーカイブまたは管理に関係するプログラムで)ブロックサイズを設定します。例:du(1)、df(1)、tar(1)。

バッチ。プログラムが自然に対話型である場合、-bを使用してプロンプトを抑制したり、人間のオペレーターではなくファイルからの入力を受け入れるのに適した他のオプションを設定したりできます。例:flex(1)。

-c
コマンド(引数付き)。プログラムが通常は標準入力からコマンドを受け取るインタープリターである場合、-c引数のオプションが1行の入力として渡されることが予想されます。この規則は、シェルおよびシェルのようなインタープリターに対して特に強力です。例:sh(1)、ash(1)、bsh(1)、ksh(1)、python(1)。以下の-eと比較してください。

チェック(引数なし)。コマンドに対するファイル引数の正確さを確認しますが、実際には通常の処理を実行しません。コマンドファイルの解釈を行うプログラムが構文チェックオプションとして頻繁に使用します。例:getty(1)、Perl(1)。

完全なリストは http://catb.org/~esr/writings/taoup/html/ch10s05.html をご覧ください

19
user647772

Linux/GNUコマンドラインインターフェイスはPOSIX標準に従います。これは、標準のGNU: http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html で示されています。

コマンドライン構文もSingle Unix Specificationの一部ですが、-long-optionsはGNU Innovation IIRCです。

こちらをご覧ください: http://pubs.opengroup.org/onlinepubs/7908799/xbd/utilconv.html

しかし、はい、この標準はgetoptとして実装されています。

10

スレッドの簡単な要約:

  • CLIは、エラーメッセージに加えて、欠落しているパラメータや誤ったパラメータがある場合にヘルプを表示する必要があります。

  • 1文字のフラグまたはオプションには-を使用し、長いオプションには--を使用する必要があります。たとえば、-aおよび--all

  • すべてのプログラムは、-v--versionおよび-h--helpの2つの標準オプションをサポートする必要があります。

    • -hおよび--help =>使用方法のメッセージを提供して終了
    • -vおよび--version =>プログラムのバージョンを表示して終了

この回答で提供されているリンク(IEEEおよびGNU getopt)を参照してください https://stackoverflow.com/a/8957246

2
JCB