이것은 디렉토리를 변경하는 스크립트입니다
[user@linux ~]$ cat script.sh
echo Before: $(pwd)
cd "$1"
echo After : $(pwd)
[user@linux ~]$
pwd
테스트했을 때 마지막 명령에 표시된 것처럼 실제로 디렉터리가 변경되지 않았습니다 .
수동 pwd
명령
[user@linux ~]$ pwd
/home/user
[user@linux ~]$
테스트 1
[user@linux ~]$ script.sh dir01/
Before: /home/user
After : /home/user/dir01
[user@linux ~]$
테스트 2
[user@linux ~]$ script.sh /home/user/dir01
Before: /home/user
After : /home/user/dir01
[user@linux ~]$
pwd
그런 다음 수동으로 다시 명령하십시오.
[user@linux ~]$ pwd
/home/user
[user@linux ~]$
내 코드에 문제가 있나요?
답변1
스크립트는 현재 셸(대화형)에서 파생된 새로운 비대화형 셸에서 시작됩니다. 새로 생성된 쉘에 대한 모든 변경 사항이 반영됩니다.오직스크립트의 수명주기 동안. 따라서 귀하의 경우에는 cd
새로운 경로가 반영됩니다.오직새로운 쉘에는아니요스크립트가 종료되면 생성된 쉘이 종료되기 때문에 부모 쉘에 다시 반영됩니다.
스크립트가 실행 가능하면 내장 명령 source
(in bash
) 또는 POSIX-ly using 명령을 사용하여 스크립트를 시작한 셸과 동일한 셸에서 스크립트를 실행할 수 있습니다. .
하려고 노력하다
. script.sh
또는 Bourne Again 쉘에서 bash
다음을 사용하십시오.source
source script.sh