Solo buscando la diferencia entre
2>&-2>/dev/null|&&>/dev/null>/dev/null 2>&1
y su facilidad de transporte y non-Bourne shellscomo tcsh, mksh, etc.
Solo buscando la diferencia entre
2>&-2>/dev/null|&&>/dev/null>/dev/null 2>&1y su facilidad de transporte y non-Bourne shellscomo 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/nullqué 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/nullLa 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>&1La 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/nullEsto 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/nullEsto 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
cshytcsh. 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)?&>estuvobashdesde 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). Estuvieronzshdesde el principio y solo se han agregado recientementebash. Ver tambiénrcpara 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/nullRedirigir STDERR a / dev / null (evitar que aparezca en la consola)
|&Redireccionar STDERR y STDOUT a STDIN del comando canalizado (cmd1 | y cmd2)
&>/dev/nullRedireccionar STDERR y STDOUT a / dev / null (no aparece nada en la consola)
>/dev/nullRedireccionar 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/nullson 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