web-dev-qa-db-fra.com

Que signifie le tiret "-" dans "tar xzf -"?

Lorsque j'essaie d'installer dropbox à partir de la ligne de commande, je lis les commandes

cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

qu'est-ce que - veux dire ici? est-ce le répertoire précédent?

23
Calculus

Certaines commandes acceptent - à la place d'un nom de fichier, soit:

  • Pour écrire dans sortie standard au lieu de dans un fichier nommé. C'est ce que le - argument passé à wget après -O fait.
  • Pour lire depuis entrée standard au lieu d'un fichier nommé. C'est ce que le - argument passé à tar après xzf.

La commande que vous avez montrée télécharge un fichier d'archive avec wget et le décompresse avec tar. Pour ce faire, la sortie de wget est canalisée (|) à l'entrée de tar. C'est pourquoi wget écrit sur la sortie standard au lieu d'un fichier et tar lit à partir de l'entrée standard au lieu d'un fichier.

42
Eliah Kagan

C'est juste un nom de fichier que beaucoup de programmes Unix interprètent comme "au lieu d'ouvrir réellement un fichier, lu depuis stdin (ou écrit dans stdout)". "

Cela signifie la lecture de l'entrée qui est diffusée dans le programme; dans votre cas, c'est la sortie de wget.

12
Marcus Müller

Le - argument à tar spécifie que l'archive doit être lue à partir de stdin au lieu d'un fichier. Depuis le manuel GNU tar :

Si tu utilises - en tant que nom_archive, tar lit l'archive à partir de l'entrée standard (lors de la liste ou de l'extraction des fichiers)

D'autres commandes ont le même comportement, et il est spécifié par la norme POSIX.1-2017 :

Ligne directrice 13 :

Pour les utilitaires qui utilisent des opérandes pour représenter les fichiers à ouvrir en lecture ou en écriture, le '- 'l'opérande doit être utilisé pour signifier uniquement une entrée standard (ou une sortie standard lorsqu'il est clair d'après le contexte qu'un fichier de sortie est spécifié) ou un fichier nommé -.

5
Tim