래퍼는 프로세스가 성공적으로 완료된 후 임시 파일의 이름을 바꿉니다.

래퍼는 프로세스가 성공적으로 완료된 후 임시 파일의 이름을 바꿉니다.

나는 다음을 달성하는 방법을 찾고 있습니다.

  1. 생성하도록 설계된 일부 명령을 실행하십시오.foo.out
  2. foo.out.tmp대상 명령이 최종 설치와 foo.out동일한 임시 파일에서 실제로 작동 하도록 솔루션이 대체되었습니다 .foo.out
  3. 프로세스가 종료되었습니다:
    • 프로세스가 종료 코드 0으로 끝나면 원자적으로mv -f foo.out.tmp foo.out
    • 그렇지 않은 경우에는 foo.out.tmp그대로 두거나 정크 파일일 수 있으므로 삭제하세요.

나는 보았다실패한 명령에 대한 리디렉션된 출력 파일 지우기foo.1.out, foo.2.out, foo.3.out, ...그러나 이는 stdout 리디렉션에 의존하며 여러 foos()를 생성하는 몇 가지 명령이 있습니다 .

생성해야 하는 경우 하위 프로세스를 실행하기 전에 명령줄에 입력한 다음 foo.out[, ...]종료 코드를 확인하거나 호출을 가로채서 매개 변수를 수정하는 마법을 수행 할 수 있는 일종의 래퍼 스크립트를 상상할 수 있습니다 .sedwaitLD_PRELOADopen

내 사용 사례에서는 임시 파일을 삭제하는 것도 완벽하게 만족스럽습니다. Docker 컨테이너와 일부 이상한 오버레이 마운트 옵션을 사용하여 실패 시 전체 출력 볼륨이 사라지는 방법을 생각할 수 없습니다.

상당히 현대적인 Linux(커널 4.x)에서 도움이 된다면.

관련 정보