web-dev-qa-db-fra.com

Où est l'argument `--` (double tiret) documenté?

Il y a des utilitaires qui acceptent un -- (double tiret) comme signal pour "fin des options", requis lorsqu'un nom de fichier commence par un tableau de bord:

$ 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.

Mais certains de ces utilitaires ne montrent pas une telle option dans la page manuelle.

Le man page pour cat Ne documentez pas l'utilisation (ou la validité) d'un -- argument dans l'un des OS'ES. Ceci n'est pas censé être une guerre de flamme UNIX - Linux , c'est une préoccupation valable et utile.

Ni cat, mv, ed (et je suis sûr que beaucoup d'autres) documentent une telle option dans leur page manuelle que je peux trouver.

Noter que ./-file est une solution de contournement plus portable à l'utilisation de --. Par exemple, la commande source (DOT) (et écrite comme .) ne fonctionne pas (généralement) bien fonctionne avec un -- argument:

$ 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

Ceci est une exigence de POSIX pour tous les utilitaires, voir POSIX CHAPITRE 12.02 , ligne directrice 10 Pour plus d'informations:

Le premier -- argument qui n'est pas un argument d'option doit être accepté comme délimiteur indiquant la fin des options. Tous les arguments suivants doivent être traités comme des opérandes, même s'ils commencent par le '-' personnage.

POSIX recommande à tous les services publics de suivre ces lignes directrices.

Il y a quelques exceptions près comme _ echo (lu sur les options) . Et produits spéciaux qui ne suivent pas les lignes directrices (comme break, dot, exec, etc.) :=:

Certaines des intégrées spéciales sont décrites comme conformes aux directives de la syntaxe des utilitaires XBD. Pour ceux qui ne sont pas, l'exigence de la description des utilitaires par défaut qui "-" soit reconnue comme un premier argument à supprimer ne s'applique pas et une application conforme ne doit pas utiliser cet argument.

L'intention consiste à documenter toutes les commandes qui ne suivent pas les directives de leur page Posix Man, de POSIX CHAPITRE 12.02 Troisième paragraphe:

Certaines des utilitaires standard ne sont pas conformes à toutes ces directives; Dans ces cas, les sections d'options décrivent les écarts.

AS la page cat posix Documents Aucun écart dans la section Options, il est prévu qu'il accepte -- comme un argument valide.

Il peut encore exister des implémentations (défectueuses) qui ne suivent pas la directive.

En particulier, la plupart tilitaires GNU Core suivent cette directive

71
schily

Il est également documenté dans getopt(1) et getopt(3) .

Par exemple,

Chaque paramètre après un paramètre `- 'est toujours interprété comme un paramètre de non-option.

3
nalzok