pushd/popd와 sub-shell+cd의 차이점

pushd/popd와 sub-shell+cd의 차이점

다음을 사용하면 어떤 이점이 있는지 이해하려고 노력하고 있습니다.

pushd my_dir
make all  # ... or something else
popd

그리고

(
    cd my_dir
    make all  # ... or something else
)

아니면 이것은 단지 선호입니까?

후자의 표기법에는 (다른 플래그와 함께) 필요할 수 있는 문제가 있을 수 있지만 set -e여전히 마지막 명령의 종료 코드를 실행하고 구문 측면에서 더 좋아 보입니다.

답변1

서브셸에서 스크립트의 일부를 실행하는 것이 항상 가능하거나 유용한 것은 아닙니다.

나는 또한 스크립트에서 pushd/를 사용합니다 popd(저는 일반적으로 스크립트에서 bashism을 사용하기 때문에 괜찮습니다). 그러나 제가 이해한 바에 따르면 이것은 대부분 대화형 쉘의 편의 기능이며 서브 쉘을 사용하는 것은 그리 재미있을 것으로 기대해서는 안됩니다.

답변2

pushd/popd읽기는 쉽지만 스크립트가 중간에 중단되면(정상 또는 강제) 변경된 CWD로 끝나게 되므로 안전하지 않습니다.

서브셸을 사용하면 실행 방식에 관계없이 원본 CWD가 보장됩니다.

Bash 초기에는 Pushd/popd를 사용했지만 지금은 가능한 한 이를 피합니다. 여전히 명령줄에서는 사용하지만 스크립트에서는 사용하지 않습니다.

스크립트를 작성할 때 항상 최악의 시나리오, 즉 현재 줄에서 실행이 중단되면 어떤 일이 일어날지 고려하십시오.

관련 정보