redireciona automaticamente a saída para / dev / null

3

Eu tenho um script simples com muita saída:

#!/bin/bash
{
apt-get update && apt-get upgrade
} 2>&1

Começando com ./script.sh >/dev/null 2>&1 silencia.

Posso silenciar o script por dentro?

    
por watchmansky 22.12.2015 / 21:40

2 respostas

6

Você pode adicionar o redirecionamento ao seu script:

- EDIT-- depois de Jeff Schaller comentar

#!/bin/bash
# case 1: if you want to hide all message even errors
{
apt-get update && apt-get upgrade
} > /dev/null 2>&1


#!/bin/bash
# case 2: if you want to hide all messages but errors
{
apt-get update && apt-get upgrade
} > /dev/null 
    
por 22.12.2015 / 21:49
1

Isso é o que o comando bash exec é para (embora possa executar outras ações também).

Excerto de man bash em uma caixa do CentOS 6.6:

   exec [-cl] [-a name] [command [arguments]]
          ...
          If command is not specified, any redirections take effect in the
          current shell, and the return status is 0.  If there is a 
          redirection error, the return status is 1.

Então, o que você está procurando é exec >/dev/null 2>&1 . Você pode usar um wrapper getopts para silenciar o script apenas se a opção -q for passada:

#!/bin/bash

getopts :q opt
case $opt in
  q)
    exec >/dev/null 2>&1
    ;;
esac
shift "$((OPTIND-1))"

Você não precisa do wrapper getopts , mas pode ser legal. De qualquer forma, isso é muito mais limpo do que enfiar todo o seu script em chaves. Você também pode usar exec para anexar a saída a um arquivo de log:

exec 2>>/var/myscript_errors.log
exec >>/var/myscript_output.log

Você tem a ideia. Ferramenta muito útil.

    
por 04.03.2016 / 09:58

Tags