![실패한 명령에 대한 리디렉션된 출력 파일 지우기](https://linux55.com/image/128530/%EC%8B%A4%ED%8C%A8%ED%95%9C%20%EB%AA%85%EB%A0%B9%EC%97%90%20%EB%8C%80%ED%95%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%EB%90%9C%20%EC%B6%9C%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%20%EC%A7%80%EC%9A%B0%EA%B8%B0.png)
할 때:
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
출력 파일은 데이터가 들어갈 수 있는지 여부에 관계없이 항상 생성되므로 처음과 동일한 문제가 발생합니다.