Como ocultar a saída do terminal ao executar um comando?

62

Quando inicio certos programas a partir da linha de comando, como eclipse e visualizador de documentos na 11.10, ele envia uma carga de informações que parece irrelevante.

Além disso, quando são executados em segundo plano, às vezes continuam a produzir saída para o terminal no qual estou trabalhando atualmente, o que é irritante.

Eu gostaria que eles apenas iniciassem e mantivessem o plano de fundo. Meu raciocínio é que, se você iniciar esses programas por meio da GUI (por exemplo, clicar duas vezes em um ícone), essas mensagens nunca serão mostradas para mim; portanto, não preciso delas na linha de comando.

Anake
fonte

Respostas:

81

Se você pode evitar escrever coisas no console, isso depende de como a saída do programa é criada. Se for transmitido para a saída padrão, será suficiente

$ eclipse >/dev/null

e nenhuma saída deve ser feita.

Para suprimir mensagens de erro também:

$ eclipse >/dev/null 2>&1

Ou no bash, simplesmente:

$ eclipse &>/dev/null

Mas se o fizerem de alguma maneira diferente, pode ser um problema impedir que ele seja gravado no console.

se possível, use a solução fornecida por MuffinStateWide

Miséria
fonte
2
Pode querer fazer isso eclipse 2&>1 >/dev/nullpara se livrar stderr. O padrão apenas redireciona stdout. E não há uma maneira "diferente" de fazer isso, se você remover stdout e stderr para o nether, não haverá saída.
TC1
@ TC1 Em princípio, um programa poderia reabrir / dev / tty e imprimir a saída lá. Na prática, os programas GUI não farão isso.
usar o seguinte comando
@ Random832 Bem, em princípio, eu sugiro canalizar esse stderr para / dev / dsp ou aplay para extra lulz ... :) Mas você está certo, em teoria, isso poderia ser feito na prática - eu provavelmente pelo menos, escreva um e-mail indelicado ao cara que fez isso.
TC1
5
@ TC1 "2> & 1> / dev / null" redirecionará o stdout para o bloco de bits, mas o stderr não será redirecionado. Você precisa reverter a ordem e fazer: "> / dev / null 2> & 1"
William Pursell
9
você também pode fazer apenas: eclipse &> /dev/null. Que chama tanto stdin e stderr para o ponto de redirecionamento (em bash)
Warren
12

Você pode criar uma função bash que irá alias um nome de comando e adicionar algumas funcionalidades extras para alcançar o que você está solicitando.

Por exemplo: digamos que você queira iniciar gvim(um editor de texto da GUI) na linha de comando.

você poderia escrever uma função como esta:

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

(adicione esta função ao seu arquivo .bashrcou .bash_aliasespara que ela esteja sempre carregada)

Explicação:

  • isso alias o gvimcomando com uma função bash também chamada gvim(portanto, quando você digita gvimem um prompt do bash, ele chama sua gvimfunção, em vez de executar o gvimcomando real . Sua função chama o gvimcomando real (e aceita seus argumentos regulares), com alguns recursos adicionais:

    • redireciona stdout e stderr para /dev/null(suprime a saída para o terminal)
    • usa &para executar o comando em segundo plano (para que seu shell não seja bloqueado)
    • usa disownpara remover o trabalho em segundo plano do shell (para que ele não apareça na lista de trabalhos ativos)
    • usa nohuppara desanexar o processo do terminal (para que você possa encerrar sua sessão de shell ou fechar seu terminal sem interromper o processo)
Corey Goldberg
fonte
btw, acho que esta é uma solução mais abrangente do que a resposta aceita do @Misery
Corey Goldberg
6

tente adicionar --help como uma opção de comando e procure por "quiet", isso deve suprimir a saída ou apenas iniciar a partir da GUI. e inicie com o switch ou encontre uma maneira de suprimi-lo via script

pessoalmente, inicio a partir do cli para obter essa saída, por isso não tenho certeza de que é possível para todos os aplicativos da GUI.

MuffinStateWide
fonte