desenv-web-rp.com

Como suprimir todas as saídas de um comando usando o Bash?

Eu tenho um script bash que executa um programa com parâmetros. Esse programa gera algum status (fazendo isso, fazendo isso ...). Não há opção para este programa ficar quieto. Como posso evitar que o script exiba algo?

Eu estou procurando algo como windows "eco off".

264
6bytes

O seguinte envia a saída padrão para o dispositivo nulo (depósito de bits).

scriptname >/dev/null

e se você também quiser que mensagens de erro sejam enviadas, use uma delas (a primeira pode não funcionar em todos os shells):

scriptname &>/dev/null
scriptname >/dev/null 2>&1
scriptname >/dev/null 2>/dev/null

e, se você quiser gravar as mensagens, mas não vê-las, substitua /dev/null por um arquivo real, como:

scriptname &>scriptname.out

Para completar, no Windows cmd.exe (onde "nul" é o equivalente de "/ dev/null"), é:

scriptname >nul 2>nul
467
andynormancx

Algo como

script > /dev/null 2>&1

Isso impedirá a saída padrão e saída de erro, redirecionando-os para /dev/null.

41
Diego Sevilla

Experimentar

: $(yourcommand)

: é a abreviação de "do nothing".

$() é apenas o seu comando.

11
V0idSt4r

Uma alternativa que pode se encaixar em algumas situações é atribuir o resultado de um comando a uma variável:

$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1

Como o Bash e outros interpretadores de linha de comando POSIX não consideram atribuições de variáveis ​​como um comando, o código de retorno do presente comando é respeitado.

Nota: atribuição com a palavra-chave typeset ou declare é considerada como um comando, então o código de retorno avaliado no caso é a própria atribuição e não o comando executado no sub-Shell:

$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
7
semente

Como andynormancx post use isto: (se você está trabalhando em um ambiente Unix)

scriptname > /dev/null

ou você pode usar isto: (se você estiver trabalhando em um ambiente Windows)

scriptname > nul
5
Lucas Gabriel Sánchez

Dê uma olhada neste exemplo de The Linux Documentation Project:

3.6 Amostra: arquivo stderr e stdout 2

Isso colocará cada saída de um programa em um arquivo. Isto é adequado às vezes para as entradas do cron, se você quiser que um comando passe em absoluto silêncio.

     rm -f $(find / -name core) &> /dev/null 

Dito isso, você pode usar este redirecionamento simples:

/path/to/command &>/dev/null
4
ivanleoncz

Em seu script, você pode adicionar o seguinte às linhas que você sabe que vão fornecer uma saída:

some_code 2>>/dev/null

Ou então você também pode tentar

some_code >>/dev/null
1
Rohan Dsouza