¿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 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


¿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 &

3

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

Editado:

$ comando &> / dev / null


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.