¿Qué significa el guión "-" al final de un comando?

¿Qué significa el guión "-" al final de un comando?

Dado el siguiente comando:

gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –

¿Qué significa -al final del comando? ¿Es algún tipo de marcador de posición?

Respuesta1

En este caso, significa "entrada estándar". Algunos programas lo utilizan (p. ej. tar) cuando se requiere un argumento de archivo y es necesario utilizar stdin en su lugar. No es una construcción de shell y depende del programa que estés usando. ¡Consulte la página de manual si tiene dudas!

En este caso, la entrada estándar es el argumento de la -fopción. En los casos en los que -no sea compatible, puede salirse con la suya usando algo como tar xvf /proc/self/fd/0o tar xvf /dev/stdin(este último es ampliamente compatible en varios Unices).

No confíe en que esto signifique "entrada estándar" universalmente. Dado que el shell no lo interpreta, cada programa es libre de tratarlo como quiera. En algunos casos, es estándar.produccióno algo completamente diferente: susignifica "iniciar un shell de inicio de sesión". En otros casos, no se interpreta en absoluto. La memoria muscular me ha hecho crear bastantes archivos nombrados -porque alguna versión de algún programa al que estaba acostumbrado no entendía el guión.

Respuesta2

En este caso, -en realidad es bastante inútil, asumiendo que estás ejecutando Linux:

GNU tar (la versión en Linux) acepta su entrada de la entrada estándar de forma predeterminada. Si lo hacesnoSi desea este comportamiento y desea pasar el nombre del archivo como argumento de línea de comando, entonces debe especificar la bandera f:

tar xf filename

Entonces esto es lo mismo que

tar x < filename

O, si la entrada está comprimida con gzip como en su ejemplo:

gzip -dc filename | tar x

No tiene ningún sentido especificar la fbandera aquí, pero debido a que se especificó, se debe proporcionar el nombre del archivo para -indicar que queremos leer desde la entrada estándar (ver otra respuesta). Entonces, repito, esto es redundante y un poco extraño.

Además, la línea anterior se puede simplificar porque se puede indicar a GNU tar que transmita la entrada a través de gzipsí mismo especificando la zbandera:

tar xfz filename

– No es necesario llamar gzipexplícitamente.

información relacionada