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 -
que veut -
dire ici? est-ce le répertoire précédent?
command-line
tar
Algèbre
la source
la source
f -
. Cela pourrait faciliter la recherche de la réponse dans les pages de manuel.wget
ettar
. De cette façon, les développeurs respectifs peuvent améliorer leur documentation afin que les futurs utilisateurs ne trébuchent plus sur les mêmes problèmes. En d'autres termes: soyez un héros et rendez le monde meilleur!$TAPE
est définie.Réponses:
Certaines commandes acceptent
-
à la place d'un nom de fichier, soit:-
argument passéwget
après-O
.-
argument est passétar
aprèsxzf
.La commande que vous avez montrée télécharge
wget
et décompresse un fichier archivetar
. Pour ce faire, la sortie dewget
est canalisée (|
) vers l'entrée detar
. C'est pourquoiwget
écrit sur la sortie standard au lieu d'un fichier ettar
lit à partir de l'entrée standard au lieu d'un fichier.la source
-
. . Donc, si-
c'est un opérande pour une "option de fichier" et qu'il a une signification spéciale, alors ce doit être celui de stdin / stdout. Le programme est libre de ne pas traiter comme un cas spécial et de simplement rechercher un fichier-
-
)-
spécialement du tout, en le traitant comme un nom de fichier littéral. La seule façon d'aller à l'encontre de la directive est de traiter-
spécialement mais avec une autre signification que celles suggérées par la directive.C'est juste un nom de fichier que beaucoup de programmes Unix interprètent comme «au lieu d'ouvrir réellement un fichier, lu
stdin
(ou écritstdout
)».Cela signifie la lecture de l'entrée qui est diffusée dans le programme; dans votre cas, c'est la sortie de wget.
la source
./-
si vous voulez réellement ouvrir un fichier nommé-
.stdin
est un descripteur de fichier, et-
c'est le nom que vous fournissez pour l'utiliser. Ce n'est pas un nom de fichier du point de vue du système d'exploitation, cependant. Seulement du point de vue de l'utilisateur./dev/stdin
est juste un nom de fichier pratique offert par une installation du noyau. Il n'y a généralement rienfopen("/dev/stdin", "r")
qui se passe lorsque vous écrivez un programme qui choisit d'utiliser stdin; vous allez de l'avant et utilisez leextern FILE* stdin
que votre en-tête libc vous a fourni; par ailleurs, c'est le descripteur de fichier entier0
.L'
-
argument àtar
spécifie que l'archive doit être lue à lastdin
place d'un fichier. Dans le manuel GNU tar :D'autres commandes ont le même comportement, et il est spécifié par la norme POSIX.1-2017 :
la source