쉘 스크립트가 종료되거나 충돌한 후 생성된 파일을 자동으로 삭제합니다.

쉘 스크립트가 종료되거나 충돌한 후 생성된 파일을 자동으로 삭제합니다.

일부 임시 파일을 생성하는 상당히 긴 bash 프로세스가 있는데 그 중 일부는 이름과 거의 임의의 이름을 생성했습니다.

프로세스가 실패한 후 수동으로 삭제하는 것을 방지하고 싶습니다. PID가 끝나면 "자동 삭제"되는 임시 디렉터리(예: PID에 연결된 디렉터리)가 있습니까? 그렇지 않다면 큰 도움이 될 것입니다.

한 가지 접근 방식은 이 디렉터리를 전역 임시 디렉터리로 생성하여 사용하는 것입니다. 그러나 이 디렉터리는 프로세스가 비정상적으로 종료된 후에도 그대로 유지됩니다 mkdir /tmp/$$./tmp

나는 사용하고 싶었지만 trap "rm -rf /tmp/$$" EXIT그것도 작동하지 않았고 트랩을 사용했습니다... RETURN이 너무 광범위합니다.

나는 모든 쉘이나 다른 사용자 프로그램에서 사용할 수 있는 일반적인 것을 찾고 있습니다.

임시 디렉토리가 존재합니까, 예, 아니오입니까?

답변1

내가하는 방법은 다음과 같습니다

tempdir=$(mktemp -d)
function cleanup {
  rm -rf "$tempdir"
}

trap cleanup EXIT
trap cleanup SIGINT

나는 잘 작동하는 몇 가지 사용 사례를 시도했습니다.

tempdir=$(mktemp -d)
function cleanup {
  rm -rf "$tempdir"
}

trap cleanup EXIT
trap cleanup SIGINT

echo "$tempdir"
sleep infinity

찾아서 ( )하면 PIDCTRL +C(SIGINT)를 사용하면 정리됩니다 .killSIGTERM$tempdir$tempdir

또 다른 예는 다음과 같습니다.

tempdir=$(mktemp -d)
function cleanup {
  rm -rf "$tempdir"
}

trap cleanup EXIT
trap cleanup SIGINT

echo "$tempdir"
set -e
/bin/false

이것은 "프로세스 실패"를 시뮬레이션합니다. false반환 되면 set -e이 스크립트는 종료됩니다. 트랩은 마지막에 계속 호출되며 디렉토리는 계속 삭제됩니다.

캡처해야 할 다른 상황이 있는 경우 더 많은 신호를 추가할 수 있습니다. 이것이 작동하지 않는 다른 사용 사례가 있습니까?

캡처할 수 없는 유일한 것은 입니다 SIGKILL.

관련 정보