web-dev-qa-db-ja.com

`--`(2つのダッシュ)引数はどこに文書化されていますか?

--(2つのダッシュ)を「オプションの終了」のシグナルとして受け入れるユーティリティがいくつかあります。これは、ファイル名がダッシュで始まる場合に必要です。

$ echo "Hello World!" >-file

$ cat -- -file
Hello World!

$ cat -file                      # cat - -file fails in the same way.
cat: invalid option -- 'f'
Try 'cat --help' for more information.

しかし、それらのユーティリティのいくつかはそのようなオプションをマニュアルページに示していません。

mancat のページには、OSでの--引数の使用(または有効性)は記載されていません。 これはUnix-Linuxの炎上戦争を意図したものではなく、有効であり、有用な懸念事項であると考えています。

catmved(他にもたくさんあると思います)は、そのようなオプションをマニュアルページに記載していません。

./-fileは、--を使用するためのよりポータブルな回避策です。たとえば、source(ドット)コマンド(および.として記述)は、(一般的に)--引数ではうまく機能しません。

$ echo 'echo "Hello World!"' >-file

$ . ./-file
Hello World!

$ . -file
ksh: .: -f: unknown option
ksh: .: -i: unknown option
ksh: .: -l: unknown option
ksh: .: -e: unknown option
Usage: . [ options ] name [arg ...]

$ . -- -file         # works in bash. Not in dash, ksh, zsh.
ksh: .: -file: cannot open [No such file or directory]
50
Isaac

これは、すべてのユーティリティのPOSIX要件です。詳細については、 POSIXの章12.02 、ガイドライン10を参照してください。

オプション引数ではない最初の-引数は、オプションの終わりを示す区切り文字として受け入れる必要があります。以降の引数は、'-'文字で始まっていても、オペランドとして扱う必要があります。

POSIXは、すべてのユーティリティがこれらのガイドラインに従うことをお勧めします。

いくつかの例外があります echo(OPTIONSで参照) のように。そして ガイドラインに従わない特別なビルトイン(breakdotexecなど)

一部の特別な組み込み機能は、XBDユーティリティ構文ガイドラインに準拠していると説明されています。そうでない場合、「-」が破棄される最初の引数として認識されるというユーティリティの説明のデフォルトの要件は適用されず、適合アプリケーションはその引数を使用しません。

目的は、ガイドラインに準拠していないすべてのコマンドを、PO​​SIXのマニュアルページに POSIX 12.02 3番目の段落から文書化することです。

一部の標準ユーティリティは、これらのガイドラインのすべてに準拠していません。そのような場合、OPTIONSセクションは偏差を記述します。

the cat POSIX man page はOPTIONSセクションに逸脱がないことを文書化しているため、--を有効な引数として受け入れることが期待されています。

ガイドラインに従わない実装がまだ存在している可能性があります。

特に、ほとんどの GNUコアユーティリティはこのガイドラインに従います

71
schily

GNUユーザーランド:Debian、RedHat、Ubuntu、ミントなど(一部のBSDではありません)があるLinux OSの場合、GNUの一般的な慣行が重要です。

あなたの質問のユーティリティのリストは、それらがGNUであるという共通点を持っています。実際、それらはすべてGNU coreutilsです。 full GNU coreutilsリスト の方が長い。

GNUのユーティリティのほとんどは、--help--versionのような共通のユーザーインターフェイスと共通の基本的なコマンドラインオプションのセット、および--の使用を共有していますend of optionsのシグナルとして。

info commonおよび the GNU web page のエントリには、次のものが含まれます。

これらのプログラムのすべてで特定のオプションを使用できます。ここでは、各プログラムについて同じ説明を書くのではなく、それらについて説明します。 (実際、すべてのGNUプログラムはこれらのオプションを受け入れます(または受け入れる必要があります)。)

「-」
オプションリストを区切ります。それ以降の引数は、「-」で始まっていても、オペランドとして扱われます。たとえば、「sort--r」は-rという名前のファイルから読み取ります。

--エントリにアクセスするためのより正確な(ただし、説明や覚えが簡単ではない)コマンドは、(正確にコピーしてください)info -- cat --です。

7
Isaac

getopt(1) および getopt(3) にも記載されています。

例えば、

「-」パラメータの後の各パラメータは、常に非オプションパラメータとして解釈されます。

3
nalzok