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.