쉘 스크립트에서 디렉토리 변경 작업 방지 또는 감지

쉘 스크립트에서 디렉토리 변경 작업 방지 또는 감지

플러그인을 허용하는 라이브러리가 있습니다. 이러한 플러그인은 쉘 스크립트입니다. 플러그인이 스크립트에 있는 모든 명령의 현재 작업 디렉터리를 변경하는 것을 방지하고 싶습니다.

내가 할 수 있는 한 가지는 cdmake나 imil을 통해 일종의 no-op를 입력하여 디렉토리 변경을 방지하는 것입니다. 이것은 나쁜 생각인 것 같고 아마도 너무 권위주의적이거나 너무 가혹한 것 같습니다.

내가 할 수 있는 또 다른 일은 플러그인이 일련의 테스트를 통과하도록 강제하고 해당 테스트 내 스크립트의 디렉터리 변경 사항을 어떻게든 감지하는 것입니다. (디렉터리 변경 명령이 실행되면 테스트가 실패합니다.)

내 질문은 - 좋은 방법이 있습니까?예방하다cd'ing (및 유사한 명령...그것들은 무엇입니까?), 또는발각쉘 스크립트의 CD?

답변1

플러그인 실행-하위 쉘 접근 방식을 사용하면(주로 플러그인이 상위 레벨의 상태를 파괴해야 하는지 여부와 관련하여 주요 단점이 있지만) 플러그인은 chdir상위 레벨 작업 디렉토리를 변경하지 않기 때문에 원하는 모든 호출을 할 수 있습니다. :

assumethisistheplugincode() {
    cd /tmp
    pwd
}

cd /var/tmp || exit 1
printf "before "
pwd

# and this is how we run a "plugin", in a subshell...
( assumethisistheplugincode )

printf "after "
pwd

답변2

더 간단한 방법

"이스케이프"할 수 없는 디렉터리에 스크립트를 복사하세요.

스크립트를 실행합니다.

chroot /directory /bin/bash ./script.sh

관련 정보