옵션을 사용하여 스크립트가 종료되거나 충돌할 때 발생하는 상황을 변경하고 싶습니다. 예를 들어 로그와 임시 파일이 깨끗하게 종료되지 않으면 정리하지 않습니다.
트랩의 동작 내에서 함수를 호출할 수 있다는 것을 알고 있습니다. 그러나 이는 일반적으로 스크립트의 프로그램/지침 부분을 입력하기 전에 처리되어야 하기 때문입니다. 나중에 평가할 변수를 사용해야 합니다.
내가 이해한 바로는 함수와 같은 것들은 메모리에 로드되고 스크립트 자체를 다시 읽을 때까지 다시 읽히지 않습니다.
작동할까요?- 그렇지 않다면 -그것을 할 수 있는 방법이 있나요? 감사해요.
답변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.