web-dev-qa-db-fra.com

Quelle est la magie de "-" (un tiret) dans les paramètres de ligne de commande?

Exemples:

  • Créez une image ISO et gravez-la directement sur un CD.

    mkisofs -V Photos -r /home/vivek/photos | cdrecord -v dev=/dev/dvdrw -

  • Passez au répertoire précédent.

    cd -

  • Écoutez sur le port 12345 et dégagez les données qui lui sont envoyées.

    nc -l -p 12345 | tar xvzf -

À quoi sert le tiret et comment l'utiliser?

87
chemila

Si vous voulez dire le nu - à la fin de la commande tar, ce qui est courant sur de nombreuses commandes qui souhaitent utiliser un fichier.

Il vous permet de spécifier une entrée ou une sortie standard plutôt qu'un nom de fichier réel.

C'est le cas pour votre premier et troisième exemple. Par exemple, la commande cdrecord prend l'entrée standard (le flux d'image ISO produit par mkisofs) et l'écrit directement dans /dev/dvdrw.

Avec la commande cd, chaque fois que vous changez de répertoire, il stocke le répertoire dont vous venez. Si vous faites cd avec le spécial - "nom du répertoire", il utilise ce répertoire mémorisé au lieu d'un vrai. Vous pouvez facilement basculer entre deux répertoires assez rapidement en l'utilisant.

D'autres commandes peuvent traiter - comme différent valeur spéciale.

95
paxdiablo

Ce n'est pas magique. Certaines commandes interprètent - en tant qu'utilisateur souhaitant lire depuis stdin ou écrire dans stdout; le Shell n'a rien de spécial.

16

Redirection depuis ou vers stdin ou stdout.

Voir: http://tldp.org/LDP/abs/html/special-chars.html#DASHREF2

12
Ry-

La magie est dans la convention. Pendant des millénaires, les gens ont utilisé "-" pour distinguer les options des arguments et ont utilisé "-" dans un nom de fichier pour signifier soit stdin soit stdout, selon le cas. Ne sous-estimez pas le pouvoir de la convention!

6
William Pursell

- signifie exactement ce que chaque commande veut que cela signifie. Il existe plusieurs conventions communes, et vous avez vu des exemples de la plupart d'entre elles dans d'autres réponses, mais aucune n'est 100% universelle.

Il n'y a rien de magique dans le - en ce qui concerne le Shell (sauf que le Shell lui-même, et certaines de ses commandes intégrées comme cd et echo, l'utilisent de manière conventionnelle). Certains personnages, comme \, ', et ", sont "magiques", ayant des significations spéciales partout où ils apparaissent. Ce sont des "métacaractères Shell". - n'est pas comme ça.

Pour voir comment une commande donnée utilise -, lire la documentation de cette commande.

6
Keith Thompson

Cela signifie utiliser le flux d'entrée standard du programme.

Dans le cas de cd, cela signifie quelque chose de différent: passez au répertoire de travail précédent.

4
Brian Cain