Como ocultar a saída de um aplicativo de shell no Linux?

Respostas:

68

Você pode redirecionar a saída de qualquer programa para que não seja vista.

$ program > /dev/null

Isso redirecionará a saída padrão - você ainda verá erros

$ program &> /dev/null

Isso redirecionará toda a saída, incluindo erros.

theotherreceive
fonte
O primeiro não funcionou para o wget
Jader Dias
É por isso que o wget usa stderr em algumas das suas saídas. O segundo deve funcionar.
theotherreceive
2
Aliás, convém salvar essa saída do wget em um arquivo de log; portanto, quando / se o download parar de funcionar, você poderá descobrir o motivo. Se estiver em um script de qualquer maneira. Se este é um one-off tipo run, então sim, para o lixo
Matt Simmons
1
Pois wgetvocê pode usar as -qopções para silenciá-lo.
Pkhamre 30/03/12
Alguma maneira de suprimir a saída gravada diretamente em / dev / tty?
d11wtq
30

Existem três dispositivos de E / S disponíveis na linha de comando.

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

Para redirecionar a saída padrão (a saída padrão) para um arquivo (e substituí-lo), use

 command > file.log 

Para anexar a file.log, use 2> s

 command >> file.log

para redirecionar o erro padrão para o arquivo.log, use

 command 2> file.log

e acrescentar

 command 2>> file.log

Para combinar as saídas em um fluxo e enviá-las para um único local

 command > file.log 2>&1 

Isso envia 2 (stderr) para 1 (stdout) e envia stdout para file.log

Observe que também é possível redirecionar o padrão para um comando que espera stdin

 command << file.txt 

EDITAR
Para obter mais detalhes, consulte o Advanced Bash Scripting Guide

Matt Simmons
fonte
Alguém pode explicar como command > file.log 2>&1funciona?
Cory Klein
Quão baixo de nível você gostaria de saber?
Matt Simmons
3
@nomoreink: na verdade são 2 comandos, um é > filee o segundo é 2>&1. O primeiro redireciona o padrão para um arquivo. O segundo pega o segundo descritor de arquivo e o redireciona para o primeiro. Você pode fazer o inverso, redirecionar a saída padrão para erro padrão usando >&2e depois redirecionar o erro padrão para um arquivo com 2> file.
Hubert Kario
12

ocultar stdout

./command >/dev/null

Ocultar stdoutestderr

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

Ocultar stdoute stderrliberar terminal (execute o comando em segundo plano)

./command >/dev/null 2>&1 &
gomoso
fonte
3

Se você deseja apenas ocultar a saída (e não salvá-la em um arquivo), você pode usar:

Editado:

$ comando &> / dev / null

Lucho
fonte
Isto irá redirecionar a saída para um arquivo chamado nulo
theotherreceive
Gerou um arquivo nulo
Jader Dias
1
você não teria significado / dev / null, não é?
Babu
1
Sim, eu teria, Babu. Eu quis dizer $ command &> / dev / null. Minhas desculpas por digitar rápido demais para o meu próprio bem.
Lucho
2

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

Se você precisar ocultar a saída sem avisar o programa, verificando o descritor do arquivo de saída / erro, tente usar o seguinte em um shell:

stty flusho; command ;stty -flusho

ou se você quiser apenas ocultar a entrada do terminal, a propósito:

stty  -echo; command ;stty  echo

Consulte a página do manual stty (1) para obter mais informações

Para Linux, tudo o que sei é que o Ubunutu (10.04 "Lucid") e alguns "Debian / Arch" (comentados abaixo - tnx hendry) não têm a flushoconfiguração (e não vejo nada mais apropriado na página de manual) . A echoconfiguração funciona no Ubuntu de qualquer maneira.

vike
fonte
Meu stty padrão no Debian / Arch não possui essas opções.
hendry
É claro que eu deveria ter mencionado que nem estava no sistema operacional do OP. Editou minha postagem.
30312 vike