잘못 작성했지만 pushd /etc
완료하지 못했다 면 어떻게 되나요 popd
? 스크립트 실행이 끝나고 Bash가 종료된 후에도 해당 스크립트는 /etc
여전히 pushd
+ popd
디렉터리 스택/RAM에 남아 있나요?bash
수동으로 지우지 않고 터미널 에뮬레이터 세션(해당 터미널 에뮬레이터 세션에 대한 셸 프로세스를 종료해야 함)을 닫으면 pushd
+directory 스택이 popd
지워지나요(변수와 마찬가지로)?bash
popd
답변1
pushd
및 명령 popd
에서 사용되는 디렉터리 스택은 bash
현재 셸에 로컬인 디렉터리 스택입니다. 즉 popd
, 스크립트 내에서 사용하지 않으면 스크립트 외부의 디렉터리 스택에는 영향을 미치지 않습니다.
터미널이 닫히면(셸이 종료되어) 스택이 지워집니다.
새 셸을 시작할 때마다 기본적으로 디렉터리 스택도 비어 있습니다 bash
.
답변2
질문에 대한 답을 찾기 위해 몇 가지 간단한 실험을 수행할 수 있습니다. 때로는 새로운 도구를 배우는 가장 좋은 방법은 직접 사용해 보는 것입니다.
pushd /etc를 사용하는 스크립트를 작성했지만 popd로 끝내지 않은 경우: Bash 스크립트가 실행을 완료하고 Bash가 종료된 후에도 /etc는 여전히 pushd+popd 디렉터리 스택/RAM에 있습니까?
$ cd /tmp
$ echo 'pushd /etc' > experiment.sh
$ bash experiment.sh
/etc /tmp
$ pwd
/tmp
$
위의 내용은 experiment.sh
잘못 작성된 스크립트입니다. pushd
현재 디렉터리를 스택에 푸시하고 해당 디렉터리로 전환한 다음 종료하는 데 사용됩니다 /etc/
. 스크립트가 종료된 후에도 실행 중인 셸은 /tmp
.
popd를 사용하여 수동으로 지우지 않고 터미널 에뮬레이터 세션(해당 터미널 에뮬레이터 세션에 대한 Bash 셸 프로세스를 종료해야 함)을 닫으면 pushd+popd 디렉터리 스택도 변수처럼 지워지나요?
$ cd /tmp
$ pushd /etc
/etc /tmp
$ dirs
/etc /tmp
-- close terminal --
-- open new terminal --
$ dirs
~
위의 셸 중 하나에서는 pushd
현재 디렉터리를 디렉터리 스택에 푸시하고 터미널을 닫은 다음 새 터미널을 엽니다. 새 터미널에서는 이전에 푸시된 디렉터리가 스택에 없는 것을 볼 수 있습니다.