Que signifie «-» (double tiret) dans cette commande shell?


13

J'ai cette commande shell:

kill `cat -- $PIDFILE`

Que fait le double - ici? Pourquoi ne pas utiliser simplement

kill `cat $PIDFILE`

Réponses:


20

Le --dit de catne pas essayer d'analyser ce qui vient après comme options de ligne de commande.

Par exemple, pensez à ce qui se passerait dans les deux cas si la variable $PIDFILEétait définie comme PIDFILE="--version". Sur ma machine, ils donnent les résultats suivants:

$ cat $PIDFILE
cat (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Torbjorn Granlund and Richard M. Stallman.

$ cat -- $PIDFILE
cat: --version: No such file or directory

3
Il est à noter que ce comportement (bien que très courant) est défini par le programme récepteur (ie cat) et non par le shell.
dmckee --- chaton ex-modérateur

Existe-t-il une documentation ou un didacticiel sur l'écriture de votre propre script shell qui comprenne --la fin des options de ligne de commande? J'en ai vu avec des getopts et d'autres techniques, mais rien à discuter --.
CMCDragonkai

3
@CMCDragonkai Vous n'avez pas besoin de regarder plus loin que la getopt(1)page de manuel : "Chaque paramètre après un paramètre '-' est toujours interprété comme un paramètre sans option".
Mikael Auno

1

POSIX.1-2017

POSIX le précise également sur: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

12.2 Consignes de syntaxe de l'utilitaire

Directive 10:

Le premier - argument qui est pas un argument d'option doit être acceptée comme séparateur indiquant la fin des options. Tous les arguments suivants doivent être traités comme des opérandes, même s'ils commencent par le caractère «-».

Voir aussi: /unix/11376/what-does-double-dash-mean-also-known-as-bare-double-dash

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.