Solo buscando la diferencia entre
2>&-
2>/dev/null
|&
&>/dev/null
>/dev/null 2>&1
y su facilidad de transporte y non-Bourne shells
como tcsh
, mksh
, etc.
Solo buscando la diferencia entre
2>&-
2>/dev/null
|&
&>/dev/null
>/dev/null 2>&1
y su facilidad de transporte y non-Bourne shells
como tcsh
, mksh
, etc.
&>
compatibilidad con bash de GNU, se recomienda encarecidamente no usar esto, ya que analizarlo puede romper la semántica de los scripts POSIX existentes, y mksh ya lo desactiva en modo POSIX.^ /dev/null
qué hace eso.Respuestas:
Para el fondo:
Primero abordemos la función de estos. Para referencia, consulte la Guía avanzada de secuencias de comandos Bash .
Las 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" y "N" son números de descriptor de archivo. Combina la salida de los descriptores de archivo "M" y "N" en una sola secuencia.|&
Esto es solo una abreviatura de
2>&1 |
. Fue agregado en Bash 4.&>/dev/null
Esto 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
Esto es solo una abreviatura de
1>/dev/null
. Redirige el descriptor de archivo 1 (STDOUT) a/dev/null
.Portabilidad a no bash, tcsh, mksh, etc.
No he tratado mucho con otros proyectiles fuera de
csh
ytcsh
. 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 de manual de tcsh para obtener más detalles.De los comandos que preguntó sobre ninguno, csh / tcsh admite directamente. Tendría que usar diferentes sintaxis para construir funciones similares.
fuente
2>&-
vs2>/dev/null
(aparte de eso, algunos programas escritos "mal" no se entienden2>&-
correctamente)?&>
estuvobash
desde el principio (y rompe la compatibilidad de Bourne y POSIX ya que significa algo diferente allí, aunque es poco probable que se vea afectado).>&
y|&
provienen de(t)csh
(y es su única forma de redirigir stderr). Estuvieronzsh
desde el principio y solo se han agregado recientementebash
. Ver tambiénrc
para operadores mejor diseñados.(+2-2=0)
. Ahora, en la parte de edición, no edito mucho, pero en este caso lo haría, porque aclara que los datos después de la operación estarían enN
. Leí su respuesta, y está muy bien en todos los aspectos. Solo esta pequeña ambigüedad me hizo pensar, por eso la edición. Pero está bien, siéntase libre de volver a agregarlo o rechazarlo, como lo hará. Espero poder explicar el punto. Sigan con el buen trabajo.Esto es para redirigir el STDERR y STDOUT:
2>/dev/null
Redirigir STDERR a / dev / null (evitar que aparezca en la consola)
|&
Redireccionar STDERR y STDOUT a STDIN del comando canalizado (cmd1 | y cmd2)
&>/dev/null
Redireccionar STDERR y STDOUT a / dev / null (no aparece nada en la consola)
>/dev/null
Redireccionar STDOUT a / dev / null (solo se muestra STDERR en la consola)
2>&-
Es para cerrar un descriptor de archivo usado con redirección
Todos estos son métodos de redireccionamiento estándar para los shells Bourne.
fuente
|&
y no&>/dev/null
son portátilesConsidere esto como un apéndice a la respuesta seleccionada. Es posible que desee saber qué formularios son POSIX y cuáles no.
Están involucrados dos formularios POSIX:
-
Por lo tanto:
La última línea no está en la pregunta original, pero funciona sin quejas en bash. (También funciona con / dev / tty sustituido por / dev / null).
fuente