Solo busco la diferencia entre
2>&-
2>/dev/null
|&
&>/dev/null
>/dev/null 2>&1
y su portabilidad con shells que no sean de Bourne como tcsh
, mksh
, etc.
Respuesta aceptada:
Para el fondo:
- un número 1 =salida estándar (es decir, STDOUT)
- un número 2 =error estándar (es decir, STDERR)
- si no se proporciona explícitamente un número, entonces número 1 es asumido por el shell (bash)
Primero, abordemos la función de estos. Para referencia, consulte la Guía avanzada de secuencias de comandos de Bash.
Funciones
2>&-
La forma general de este es M>&-
, donde “M” es un número de descriptor de archivo. Esto cerrará la salida para cualquier descriptor de archivo al que se haga referencia, es decir, “M” .
2>/dev/null
La forma general de este es M>/dev/null
, donde “M” es un número de descriptor de archivo. Esto redirigirá el descriptor de archivo, “M” , a /dev/null
.
2>&1
La forma general de este es M>&N
, donde “M” &
|&
Esta es solo una abreviatura de 2>&1 |
. Se agregó en Bash 4.
&>/dev/null
Esta es solo una abreviatura de >/dev/null 2>&1
. Redirige el descriptor de archivo 2 (STDERR) y el descriptor 1 (STDOUT) a /dev/null
.
>/dev/null
Esta es solo una abreviatura de 1>/dev/null
. Redirige el descriptor de archivo 1 (STDOUT) a /dev/null
.
Portabilidad a non-bash, tcsh, mksh, etc.
No he tratado mucho con otros shells fuera de csh
y tcsh
. Mi experiencia con esos 2 en comparación con los operadores de redirección de bash es que bash es superior en ese sentido. Consulte la página man de tcsh para obtener más detalles.
De los comandos sobre los que preguntó, ninguno es compatible directamente con csh/tcsh. Tendría que usar diferentes sintaxis para construir funciones similares.