종료 코드가 0이 아닌 경우 출력을 억제합니다.

종료 코드가 0이 아닌 경우 출력을 억제합니다.

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

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

그리고 running 을 실행 quiet_success my_long_noisy_script.sh하지만 더 좋은 방법이 있는지는 잘 모르겠습니다. 이건 다른 사람들도 꼭 해야 할 일인 것 같아요.

상황에 맞게 이것을 cron 스크립트에 추가하여 실패 시 모든 내용이 포함된 이메일을 받지만 실패하면 그렇지 않도록 하고 싶습니다.

답변1

어쨌든 출력을 어딘가에 버퍼링해야 합니다. 종료 코드가 무엇을 해야 할지 알 때까지 기다려야 하기 때문입니다. 다음과 같은 것이 아마도 가장 쉬울 것입니다.

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

답변2

이것moreutils패키지에는 프로그램이 포함되어 있습니다.chronic이 목적을 위해. 넌 그냥 그렇게 부르잖아

chronic my_program args ...

cron 작업에 매우 편리합니다.

관련 정보