종료 코드가 0이 아닌 경우 출력을 억제 “$file” 2>&1; then

프로그램이 0이 아닌 코드로 종료되지 않는 한 출력 (stdout 및 stderr)을 억제하는 가장 좋은 방법은 무엇입니까? 나는 생각 중입니다:

quiet_success()
{
  file=$(mktemp)
  if ! "$@" > "$file" 2>&1; then
    cat "$file"
  fi
  rm -f "$file"
}

그리고 실행 quiet_success my_long_noisy_script.sh하지만 더 좋은 방법이 있는지 확실하지 않습니다. 다른 사람들이해야 할 일이라고 생각합니다.

맥락 상, 나는 이것을 cron 스크립트에 추가하여 실패했을 때 모든 것이 이메일로 전송되도록하고 싶습니다.



답변

종료 코드가 무엇을해야하는지 알기 위해 기다려야하므로 출력이 무엇이든 상관없이 출력을 버퍼링해야합니다. 이와 같은 것이 아마도 가장 쉬운 것입니다.

$ output=`my_long_noisy_script.sh 2>&1` || echo $output

답변

moreutils패키지는 프로그램에 포함 chronic이 목적을. 당신은 그냥 이렇게 호출

chronic my_program args ...

크론 작업에 매우 편리합니다.