나는 다음을 달성하는 방법을 찾고 있습니다.
- 생성하도록 설계된 일부 명령을 실행하십시오.
foo.out
foo.out.tmp
대상 명령이 최종 설치와foo.out
동일한 임시 파일에서 실제로 작동 하도록 솔루션이 대체되었습니다 .foo.out
- 프로세스가 종료되었습니다:
- 프로세스가 종료 코드 0으로 끝나면 원자적으로
mv -f foo.out.tmp foo.out
- 그렇지 않은 경우에는
foo.out.tmp
그대로 두거나 정크 파일일 수 있으므로 삭제하세요.
- 프로세스가 종료 코드 0으로 끝나면 원자적으로
나는 보았다실패한 명령에 대한 리디렉션된 출력 파일 지우기foo.1.out, foo.2.out, foo.3.out, ...
그러나 이는 stdout 리디렉션에 의존하며 여러 foos()를 생성하는 몇 가지 명령이 있습니다 .
생성해야 하는 경우 하위 프로세스를 실행하기 전에 명령줄에 입력한 다음 foo.out[, ...]
종료 코드를 확인하거나 호출을 가로채서 매개 변수를 수정하는 마법을 수행 할 수 있는 일종의 래퍼 스크립트를 상상할 수 있습니다 .sed
wait
LD_PRELOAD
open
내 사용 사례에서는 임시 파일을 삭제하는 것도 완벽하게 만족스럽습니다. Docker 컨테이너와 일부 이상한 오버레이 마운트 옵션을 사용하여 실패 시 전체 출력 볼륨이 사라지는 방법을 생각할 수 없습니다.
상당히 현대적인 Linux(커널 4.x)에서 도움이 된다면.