Cuando intento instalar Dropbox desde la línea de comandos, leo los comandos
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
que -
significa aqui ¿Es el directorio anterior?
command-line
tar
Álgebra
fuente
fuente
f -
. Esto podría hacer que encontrar la respuesta en las páginas de manual sea un poco más fácil.wget
ytar
. De esa forma, los respectivos desarrolladores pueden mejorar su documentación para que los futuros usuarios no vuelvan a tropezar con los mismos problemas. En otras palabras: ¡sé un héroe y haz del mundo un lugar mejor!$TAPE
esté configurado.Respuestas:
Algunos comandos aceptan
-
en lugar de un nombre de archivo, ya sea:-
argumento pasadowget
después-O
.-
que pasó el argumentotar
despuésxzf
.El comando que mostró descarga un archivo con
wget
y lo descomprimetar
. Para lograr esto, la salida dewget
se canaliza (|
) a la entrada detar
. Esta es la razón por la quewget
escribe en la salida estándar en lugar de un archivo ytar
lee desde la entrada estándar en lugar de un archivo.fuente
-
. . Entonces, si-
es un operando para una "opción de archivo" y tiene un significado especial, entonces debe ser el de stdin / stdout. El programa es gratuito para no tratarlo como un caso especial y simplemente buscar el archivo-
-
)-
especialmente en absoluto, tratándolo como un nombre de archivo literal. La única manera de ir en contra de la directriz es tratar-
especialmente, pero con algún otro significado que los que sugiere la directriz.Es solo un nombre de archivo que muchos programas de Unix interpretan como "en lugar de abrir un archivo, leer
stdin
(o escribirstdout
)".Eso significa leer de la entrada que se transmite al programa; en su caso, esa es la salida de wget.
fuente
./-
si realmente desea abrir un archivo llamado-
.stdin
es un descriptor de archivo y-
es el nombre que proporciona para usarlo. Sin embargo, no es un nombre de archivo desde la perspectiva del sistema operativo. Solo desde la perspectiva del usuario./dev/stdin
es solo un nombre de archivo de conveniencia ofrecido por alguna instalación de kernel. Por lo general, nofopen("/dev/stdin", "r")
ocurre nada en ningún lugar cuando escribe un programa que elige usar stdin; simplemente continúe y use elextern FILE* stdin
que le proporcionó su encabezado libc; por cierto, ese es el descriptor de archivo entero0
.El
-
argumento paratar
especifica que el archivo debe leerse enstdin
lugar de un archivo. Del manual de GNU tar :Otros comandos tienen el mismo comportamiento, y está especificado por el estándar POSIX.1-2017 :
fuente