¿Cómo ocultar la salida del terminal al ejecutar un comando?

62

Cuando ejecuto ciertos programas desde la línea de comandos, como eclipse y visor de documentos en 11.10, arroja una carga de información que parece intrascendente.

Además, cuando se ejecutan en segundo plano, a veces continúan produciendo resultados en el terminal en el que estoy trabajando actualmente, lo cual es irritante.

Me gustaría que simplemente se inicien y mantengan las cosas de fondo en segundo plano. Mi razonamiento es que si inicia estos programas a través de la GUI (por ejemplo, haciendo doble clic en un icono), estos mensajes nunca se me mostrarán, por lo que no los necesito en la línea de comandos.

Anake
fuente

Respuestas:

81

Si puede evitar escribir cosas en la consola, depende de cómo se cree la salida del programa. Si se transmite a la salida estándar, entonces es suficiente

$ eclipse >/dev/null

y no se debe hacer ninguna salida.

Para suprimir también los mensajes de error:

$ eclipse >/dev/null 2>&1

O en bash, simplemente:

$ eclipse &>/dev/null

Pero si lo hacen de alguna manera diferente, entonces podría ser un problema evitar que escriba en la consola.

si es posible, use la solución dada por MuffinStateWide

Miseria
fuente
2
Podría querer eclipse 2&>1 >/dev/nulldeshacerse de eso stderr. El valor predeterminado solo redirige stdout. Y no hay una forma "diferente" de hacerlo, si purgas tanto stdout como stderr en la parte inferior, no habrá salida.
TC1
@ TC1 En principio, un programa podría volver a abrir / dev / tty e imprimir la salida allí. En la práctica, los programas GUI no harán eso.
Random832
@ Random832 Bueno, en principio, sugeriría canalizar ese stderr a / dev / dsp o aplay para lulz adicional ... :) Pero tienes razón, en teoría podría hacerse, en la práctica, probablemente en menos escribir un correo electrónico de mala educación al tipo que hizo eso.
TC1
55
@ TC1 "2> & 1> / dev / null" redirigirá stdout al depósito de bits, pero stderr no será redirigido. Debe invertir el orden y hacer: "> / dev / null 2> & 1"
William Pursell
99
también se puede hacer simplemente: eclipse &> /dev/null. Eso atrapa a stdin y stderr en el punto de redireccionamiento (en bash)
warren
12

Puede crear una función bash que alias un nombre de comando y agregar alguna funcionalidad adicional para lograr lo que está pidiendo.

Por ejemplo: supongamos que desea iniciar gvim(un editor de texto gui) desde la línea de comandos.

podrías escribir una función como esta:

function gvim () {
    nohup gvim "$@" > /dev/null 2>&1 & disown
}

(agregue esta función a su archivo .bashrco .bash_aliasespara que siempre se cargue)

Explicación:

  • esto alias el gvimcomando con una función bash también llamada gvim(así que cuando escribes gvimen un indicador bash, llamará a tu gvimfunción, en lugar de ejecutar el gvimcomando real . Tu función llama al gvimcomando real (y acepta sus argumentos regulares), con Algunas características adicionales:

    • redirige stdout y stderr a /dev/null(suprime la salida al terminal)
    • utiliza &para ejecutar el comando en segundo plano (para que su shell no esté bloqueado)
    • se utiliza disownpara eliminar el trabajo en segundo plano del shell (para que no aparezca en la lista de trabajos activos)
    • utiliza nohuppara separar el proceso del terminal (para que pueda finalizar su sesión de shell o cerrar su terminal sin matar el proceso)
Corey Goldberg
fuente
por cierto, creo que esta es una solución más completa que la respuesta aceptada de @Misery
Corey Goldberg
6

intente agregar --help como un interruptor de comando y busque "silencioso", esto debería suprimir la salida, o simplemente iniciar desde la GUI. e inicie con el interruptor o encuentre una manera de suprimirlo mediante un script

personalmente inicio desde cli para obtener esa salida, así que no estoy seguro de que sea posible para todas las aplicaciones GUI.

MuffinStateWide
fuente