표준 입력 옵션을 사용하여 Bash에서 트랩 작업을 변경할 수 있나요?

표준 입력 옵션을 사용하여 Bash에서 트랩 작업을 변경할 수 있나요?

옵션을 사용하여 스크립트가 종료되거나 충돌할 때 발생하는 상황을 변경하고 싶습니다. 예를 들어 로그와 임시 파일이 깨끗하게 종료되지 않으면 정리하지 않습니다.

트랩의 동작 내에서 함수를 호출할 수 있다는 것을 알고 있습니다. 그러나 이는 일반적으로 스크립트의 프로그램/지침 부분을 입력하기 전에 처리되어야 하기 때문입니다. 나중에 평가할 변수를 사용해야 합니다.

내가 이해한 바로는 함수와 같은 것들은 메모리에 로드되고 스크립트 자체를 다시 읽을 때까지 다시 읽히지 않습니다.

작동할까요?- 그렇지 않다면 -그것을 할 수 있는 방법이 있나요? 감사해요.

답변1

귀하의 질문을 올바르게 이해했다면 수정되지 않은 쉘 스크립트에 동작을 "주입"하고 싶을 것입니다.

bash 매뉴얼 페이지를 확인하고 BASH_ENV실제 스크립트 전에 실행될 에서 참조하는 파일을 찾으세요. 기존 스크립트가 실행될 때 수행하는 작업에 따라 이러한 방식으로 동작을 조정할 수 있습니다.

이 예에서는 BASH_ENV스크립트와 실제 스크립트를 생성합니다. 보시다시피, trap의 코드는 BASH_ENV실행할 내용을 설정합니다.

set -ex
read td < <(mktemp --directory --tmpdir=/dev/shm .XXX)
trap "rm -rf ${td}" EXIT
t_BASH_ENV="${td}/BASH_ENV"
t_BASH_SCRIPT="${td}/BASH_SCRIPT"
cat > ${t_BASH_ENV} <<'_EOF_'
: t_BASH_ENV $PPID $$
trap ": trapped t_BASH_ENV $PPID $$" EXIT
_EOF_
cat > ${t_BASH_SCRIPT} <<'_EOF_'
: t_BASH_SCRIPT $PPID $$
_EOF_
env -i BASH_ENV=${t_BASH_ENV} bash -x "${t_BASH_SCRIPT}"

산출:

+ read td
++ mktemp --directory --tmpdir=/dev/shm .XXX
+ trap 'rm -rf /dev/shm/.vJp' EXIT
+ t_BASH_ENV=/dev/shm/.vJp/BASH_ENV
+ t_BASH_SCRIPT=/dev/shm/.vJp/BASH_SCRIPT
+ cat
+ cat
+ env -i BASH_ENV=/dev/shm/.vJp/BASH_ENV bash -x /dev/shm/.vJp/BASH_SCRIPT
+ : t_BASH_ENV 4438 4443
+ trap ': trapped t_BASH_ENV 4438 4443' EXIT
+ : t_BASH_SCRIPT 4438 4443
+ : trapped t_BASH_ENV 4438 4443
+ rm -rf /dev/shm/.vJp

HTH.

관련 정보