Suprime a saída, a menos que o código de saída diferente de zero

18

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.

    
por dimo414 22.06.2012 / 16:11

2 respostas

14

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
    
por 22.06.2012 / 18:17
12

O pacote moreutils contém um programa chronic para este propósito. Você acabou de chamá-lo como

chronic my_program args ...

Muito útil em tarefas agendadas.

    
por 19.01.2016 / 21:50