Tengo un programa que sale a stdout y me gustaría silenciar esa salida en un script Bash mientras se canaliza a un archivo.
Por ejemplo, ejecutar el programa generará:
% myprogram
% WELCOME TO MY PROGRAM
% Done.
Quiero que el siguiente script no envíe nada al terminal:
#!/bin/bash
myprogram > sample.s

Respuestas:
Si sale a stderr también, querrás silenciar eso. Puede hacerlo redirigiendo el descriptor de archivo 2:
fuente
&>es mucho más viejo que bash 4.&>la introducción? : o>>&se introdujo en 4.0. No se menciona,&>pero los CAMBIOS solo se remontan a 2.0, así que creo que eso significa que ya estaba en 1.x.git blameenredir.cpuntos a una confirmación de 1998 para la ocurrencia más antigua aún en la base de código actual.Redirigir stderr a stdout
Esto redirigirá el stderr (que es el descriptor 2) al descriptor de archivo 1, que es el stdout.
Redirigir stdout a archivo
Ahora, cuando realice esto, está redirigiendo la salida estándar al archivo
sample.sRedirigir stderr y stdout a archivo
La combinación de los dos comandos dará como resultado la redirección de stderr y stdout a sample.s
Redireccionar stderr y stdout a / dev / null
Redireccionar a
/dev/nullsi desea silenciar completamente su aplicación.fuente
myprogram >/dev/null 2>&1(observe la cuña antes/dev/nully el orden de las redirecciones).myprogram &>/dev/nullseria suficiente?Toda la salida:
Portátil:
Portátil:
Para bash más nuevo (no portátil):
fuente
-y&>es una extensión de shell bourne no portátil.echo moo 1>&-produce un error porque el descriptor de archivo 1 está cerrado:-bash: echo: write error: Bad file descriptorSi desea STDOUT y STDERR ambos [todo], entonces la forma más simple es:
luego ejecútelo como
./script, y no obtendrá salida a su terminal. :)"> &" significa STDERR y STDOUT. el
&también funciona de la misma manera con un tubo:./script |& sedeso enviará todo para SEDfuente
a 2>&1 | b 2>&1 | cSi todavía está luchando por encontrar una respuesta, especialmente si produjo un archivo para la salida, y prefiere una alternativa clara:
echo "hi" | grep "use this hack to hide the oputut :) "fuente
Probar con:
para no obtener salida
fuente
Nota: Esta respuesta está relacionada con la pregunta "Cómo desactivar el eco mientras se ejecuta un script de shell Linux", que a su vez se marcó como duplicado a este.
Para desactivar realmente el eco, el comando es:
(esto es, por ejemplo; cuando desea ingresar una contraseña y no desea que sea legible. Recuerde activar el eco al final de su script, de lo contrario la persona que ejecuta su script no verá lo que / ella escribe a partir de ese momento. Para activar echo en ejecución:
fuente
Útil en guiones:
Obtenga solo el STDERR en un archivo, mientras oculta cualquier STDOUT incluso si el programa para ocultar no existe en absoluto (nunca bloquea el script principal), esto solo funcionaba:
Separar completamente y silenciar todo, incluso matar el script principal no abortará
./prog:fuente
Para salida solo en caso de error :
fuente