¿Cómo ocultar la salida de una aplicación de shell en Linux?

Respuestas:

68

Puede redirigir la salida de cualquier programa para que no se vea.

$ program > /dev/null

Esto redirigirá la salida estándar; aún verá errores

$ program &> /dev/null

Esto redirigirá toda la salida, incluidos los errores.

el otro recibir
fuente
El primero no funcionó para wget
Jader Dias
Eso es porque wget usa stderr para algunos de sus resultados. El segundo debería funcionar.
theotherrecibido el
2
Por cierto, es posible que desee guardar esa salida de wget en un archivo de registro, por lo que cuando / si su descarga deja de funcionar, puede averiguar por qué. Si está en un guión de todos modos. Si esta es una carrera única, entonces sí, a la basura
Matt Simmons
1
Para wgetque pueda utilizar las -qopciones para que sea silencioso.
pkhamre
¿Alguna forma de suprimir la salida escrita directamente en / dev / tty?
d11wtq
30

Hay tres dispositivos IO disponibles en la línea de comandos.

 standard in - 0 
 standard out - 1 
 standard error - 2 

Para redirigir la salida estándar (la salida predeterminada) a un archivo (y sobrescribir el archivo), use

 command > file.log 

Para adjuntar a file.log, use 2> s

 command >> file.log

para redirigir el error estándar al archivo.log, use

 command 2> file.log

y anexar

 command 2>> file.log

Para combinar las salidas en una secuencia y enviarlas todas a un solo lugar

 command > file.log 2>&1 

Esto envía 2 (stderr) a 1 (stdout) y envía stdout a file.log

Tenga en cuenta que también es posible redirigir el estándar en un comando que espera stdin

 command << file.txt 

EDITAR
Para obtener más detalles, consulte la Guía avanzada de secuencias de comandos Bash

Matt Simmons
fuente
¿Alguien puede explicar cómo command > file.log 2>&1funciona?
Cory Klein
¿Qué nivel bajo te gustaría saber?
Matt Simmons
3
@nomoreink: en realidad son 2 comandos, uno es > filey el segundo es 2>&1. El primero redirige el estándar a un archivo. El segundo toma el segundo descriptor de archivo y lo redirige al primero. Puede hacer lo contrario, redirigir la salida estándar al error estándar usando >&2y luego redirigir el error estándar a un archivo con 2> file.
Hubert Kario el
12

Esconder stdout

./command >/dev/null

Ocultar stdoutystderr

./command >/dev/null 2>&1

Ocultar stdouty stderrliberar terminal (ejecutar el comando en segundo plano)

./command >/dev/null 2>&1 &
pegajoso
fuente
3

Si solo desea ocultar la salida (y no guardarla en un archivo), puede usar:

Editado:

$ comando &> / dev / null

Lucho
fuente
Esto redirigirá la salida a un archivo llamado nulo
recibirá el
Se generó un archivo nulo
Jader Dias
1
no habrías querido decir / dev / null, ¿verdad?
Babu
1
Sí, lo habría hecho, Babu. Quise decir $ command &> / dev / null. Mis disculpas por escribir demasiado rápido para mi propio bien.
Lucho
2

Para Mac OS X (10.6 "Snow Leopard"):

Si necesita ocultar la salida sin dejar que el programa lo sepa marcando el descriptor del archivo de salida / error, puede intentar usar lo siguiente en un shell:

stty flusho; command ;stty -flusho

o si solo quieres ocultar la entrada del terminal por cierto:

stty  -echo; command ;stty  echo

Consulte la página del manual stty (1) para obtener más información.

Para Linux, todo lo que sé es que Ubunutu (10.04 "Lucid") y algunos "Debian / Arch" (comentados a continuación - tnx hendry) no tienen la flushoconfiguración (y no puedo ver nada más apropiado en la página del manual) . La echoconfiguración funciona en Ubuntu de todos modos.

vike
fuente
Mi stty predeterminado en Debian / Arch no tiene estas opciones.
hendry
Por supuesto, debería haber mencionado que ni siquiera estaba en el sistema operativo del OP. Edité mi publicación.
Vike