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 blame
enredir.c
puntos 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.s
Redirigir 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/null
si desea silenciar completamente su aplicación.fuente
myprogram >/dev/null 2>&1
(observe la cuña antes/dev/null
y el orden de las redirecciones).myprogram &>/dev/null
seria 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 descriptor
Si 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 |& sed
eso enviará todo para SEDfuente
a 2>&1 | b 2>&1 | c
Si 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