Respuestas:
En este caso, significa 'entrada estándar'. Es utilizado por algún software (p tar
. Ej. ) Cuando se requiere un argumento de archivo y necesita usar stdin en su lugar. No es una construcción de shell y depende del programa que esté utilizando. ¡Consulte la página de manual si tiene dudas!
En este caso, la entrada estándar es el argumento de la -f
opción. En los casos en -
que no es compatible, puede salirse con la suya usando algo como tar xvf /proc/self/fd/0
o tar xvf /dev/stdin
(este último es ampliamente compatible en varios dispositivos).
No confíe en que esto signifique 'entrada estándar' universalmente. Como no es interpretado por el shell, cada programa es libre de manejarlo como lo desee. En algunos casos, es una salida estándar o algo completamente diferente: en su
ella significa '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.
STDOUT
, dependiendo del contexto.
/dev/stdin
o /dev/stdout
puede usarse si realmente desea una secuencia de entrada / salida. Tenga en cuenta que es una secuencia, los programas que desean buscar en un archivo pueden no funcionar correctamente con él, como sería el caso -
(por ejemplo, ffmpeg)
bash
, el guión es interpretado por el shell. Consulte la Guía avanzada de secuencias de comandos Bash - Capítulo 3. Caracteres especiales , luego busque el texto [guión] o "redirección de / a stdin o stdout". Utilizando bash
puede usar el guión en la mayoría de los lugares que esperan un nombre de archivo. Es un complemento obvio para <| > En mi humilde opinión
cat
maneja -
(verifique la página de manual). Una versión de shell integrada en cat
might o might, no es estrictamente todo el shell. Además, si el shell se maneja -
, podría decir echo -
y se expandiría a otra cosa. En cambio, solo hace eco de un guión (no /dev/stdin
o /proc/self/fd/0
). Y echo test > -
solo crea un archivo llamado -
, por lo que claramente tampoco lo maneja allí. Ah, y la página que enumeró no dice que es manejada por el shell , dice que puede usarla cat
y diff
, ambos entienden los guiones explícitamente.
En este caso, en -
realidad es bastante inútil, suponiendo que esté ejecutando Linux:
GNU tar (la versión en Linux) acepta su entrada desde la entrada estándar por defecto. Si no desea este comportamiento y desea pasar el nombre del archivo como argumento de línea de comando, debe especificar el indicador f
:
tar xf filename
Entonces esto es lo mismo que
tar x < filename
O, si la entrada se comprime como en su ejemplo:
gzip -dc filename | tar x
No tiene sentido especificar el f
indicador aquí en absoluto, pero debido a que se especificó, el nombre del archivo debe darse -
para indicar que queremos leer de la entrada estándar (ver otra respuesta). Entonces, para repetir, esto es redundante y un poco extraño.
Además, la línea anterior se puede simplificar porque se le puede decir a GNU tar que transmita la entrada a través de gzip
sí misma especificando el z
indicador:
tar xfz filename
- No es necesario llamar gzip
explícitamente.
tar
tienen z
opción.
tar
predeterminado de la primera unidad de cinta, por razones históricas.
/dev/sa0
en FreeBSD 9.0, /dev/rst0
en NetBSD 6.0 y OpenBSD 5.1). AIX 7.1 por defecto es /dev/rmt0
. MINIX3 por defecto es /dev/sa0
. (Verifiqué la última versión del sistema operativo en cada caso, estos no son "mainframes viejos"). Solaris es configurable a través de un archivo /etc
, que creo que es por defecto una unidad de cinta. GNU tar, Schilling tar, OSX y BusyBox tienen por defecto stdin / stdout.
tar
por defecto la segunda unidad de cinta, por razones obvias. :)
-
no necesita estar al final del comando. Por ejemplo:ls -l | diff - /old_ls_output.txt
.