Que signifie «-» dans les commandes du terminal?

23

J'ai vu de nombreux tutoriels qui utilisent des --commandes after. Quelque chose comme ça:

command -- 

Qu'est-ce --que cela signifie?

Jibril
la source
Quels tutoriels vidéo?
TheWanderer
En fait, je suis surpris que cette question ne soit pas dupe de l'UA. Les questions identiques sur d'autres communautés StackExchange ne comptent-elles pas comme dupes (à savoir le lien donné par @edwinksl)? Quel est le point de vue là-dessus? Je devrais peut-être demander cela sur META ....
Cbhihe
@Cbhihe Je ne connais pas de mécanisme qui nous permette de pointer pour dupliquer des cibles d'autres sites SE. Quoi qu'il en soit, cela n'arrive pas trop souvent, il n'y en a donc probablement pas besoin.
edwinksl
3
@ anonymous2 pourquoi diable ferions-nous cela? La question est sur le sujet ici, donc elle peut rester. Le déplacer supprimerait des informations de l'UA et n'ajouterait rien de nouveau à U&L, donc je ne vois pas pourquoi ce serait une bonne chose.
terdon

Réponses:

46

Le --est utilisé pour indiquer la fin des options de ligne de commande. Cela vous permet d'utiliser des arguments commençant par --. Par exemple, si vous créez un fichier appelé --foo:

$ > '--foo'
$ ls
--foo

Et puis essayez de le supprimer, rmpensera que vous lui donnez un argument:

$ rm --foo 
rm: unrecognized option '--foo'
Try 'rm ./--foo' to remove the file '--foo'.
Try 'rm --help' for more information.

Une solution consiste à utiliser --:

$ rm -- --foo

Cette pratique est courante et recommandée par POSIX , elle est donc prise en charge par de nombreux programmes.

terdon
la source
13
Il n'est pas du tout implémenté par Bash. Il est une caractéristique du rmprogramme et de nombreux utilitaires compatibles POSIX. Voir la ligne directrice 10 . Pour vérifier que ce n'est pas Bash qui fait le travail (et cela n'a pas de sens), il suffit de créer un petit script avec juste printf '> %s <\n' "$@"et de le lancer avec --.
gniourf_gniourf
3
@gniourf_gniourf d'oh! J'ai vérifié en écrivant un petit script perl qui affiche ses options et il n'en voit pas si vous le passez --, mais, bien sûr, c'est simplement parce que le module Perl ( getopts) le prend également en charge. Vous avez tout à fait raison, j'ai simplement cherché rapidement man bash, vu la section que j'avais citée mais je n'ai pas remarqué qu'elle se trouvait dans la section "Options de ligne de commande". Merci pour la correction, réponse modifiée.
terdon
1

La plupart des commandes utilisent un - pour indiquer à la commande que les autres paramètres doivent être traités différemment. Un exemple est le nom de fichier rm - - noté ci-dessus. Un autre exemple, un script comme «startx» interprétera tout lui-même avant -, et passera tout après au serveur X.

delt
la source