다음을 사용하면 어떤 이점이 있는지 이해하려고 노력하고 있습니다.
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를 사용했지만 지금은 가능한 한 이를 피합니다. 여전히 명령줄에서는 사용하지만 스크립트에서는 사용하지 않습니다.
스크립트를 작성할 때 항상 최악의 시나리오, 즉 현재 줄에서 실행이 중단되면 어떤 일이 일어날지 고려하십시오.