Você terá que armazenar em buffer a saída em algum lugar, não importa o quê, já que precisa aguardar o código de saída para saber o que fazer. Algo como isso é provavelmente mais fácil:
$ output='my_long_noisy_script.sh 2>&1' || echo $output
Qual é a melhor maneira de suprimir a saída (stdout e stderr), a menos que o programa saia com um código diferente de zero? Estou pensando:
quiet_success()
{
file=$(mktemp)
if ! "$@" > "$file" 2>&1; then
cat "$file"
fi
rm -f "$file"
}
E execute quiet_success my_long_noisy_script.sh
, mas não tenho certeza se existe uma maneira melhor. Eu sinto que isso tem que ser algo que outras pessoas precisam fazer.
Para o contexto, eu estou olhando para adicionar isso aos meus scripts cron para que eu receba um email com tudo se eles falharem, mas não se eles falharem.
Você terá que armazenar em buffer a saída em algum lugar, não importa o quê, já que precisa aguardar o código de saída para saber o que fazer. Algo como isso é provavelmente mais fácil:
$ output='my_long_noisy_script.sh 2>&1' || echo $output