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.