실패한 명령에 대한 리디렉션된 출력 파일 지우기

실패한 명령에 대한 리디렉션된 출력 파일 지우기

할 때:

CMD > file.out

CMD가 실패하면(0이 아닌 종료 코드) "file.out"은 비어 있거나 불완전합니다.

CMD가 실패할 경우를 대비한 정리 방법을 찾고 있습니다.

CRON 작업에서 CMD가 실행될 때 비어 있거나 불완전한 파일을 남기지 않고 지정된 출력 파일을 삭제하고 싶습니다.

나의 초기 생각은 다음과 같습니다.

if ! CMD > file.out; then rm file.out; fi

하지만 CMD 종료 상태를 숨기므로 적합하지 않습니다. (특히 CRON의 경우)

  • 누구든지 더 나은 솔루션을 생각할 수 있습니까?
  • 이것을 허용하는 bash 또는 sh에 일부 기능이 있습니까?
  • 나는 "티셔츠"와 같은 유틸리티가 다음과 같은 기능을 할 수 있기를 바랐습니다.
    • STDOUT 출력을 파일로 리디렉션합니다.
    • 명령이 실패하면 출력 파일이 삭제됩니다.
    • 모든 경우에 CMD 종료 코드가 반환됩니다.

답변1

초기 아이디어는 훌륭하며 다음으로 확장될 수 있습니다.

if ! CMD >file.out; then rm file.out; exit 1; fi

에서 특정 종료 상태를 캡처해야 하는 경우 CMD다음을 수행하고 exit나중에 사용하십시오.

if ! CMD >file.out; then err="$?"; rm file.out; exit "$err"; fi

exit "$?"현재는 rm수정되었기 때문에 사용하실 수 없으니 주의하시기 바랍니다 $?.


tee출력 파일은 데이터가 들어갈 수 있는지 여부에 관계없이 항상 생성되므로 처음과 동일한 문제가 발생합니다.

관련 정보