파일명 : test.sh
#!/bin/bash
ZDir="$(echo /usr/src)"
cd "$ZDir"
스크립트를 실행하면 ./Test.sh
명령이 cd
아무 작업도 수행하지 않습니다. bash 터미널에서 직접 이 작업을 수행하려고 하면 매력처럼 작동합니다. 또한 스크립트 내부와 외부 모두에서 사용되는 에코는 올바른 값( /usr/src
)을 반환합니다.
왜 이런 일이 일어나는지 아는 사람이 있나요? 다시 말하지만, cd $ZDir
이는 스크립트 외부의 터미널에서 직접 사용하면 작동합니다...
편집: "중복된" 답변을 찾을 수 없었지만 G-Man 사용자가 제가 해야 할 일에 대해 정확하게 답변해 주었습니다. &&를 포함하고 실행해야 하는 다음 명령을 입력하면 작동합니다. 이를 위해 함수를 사용할 수도 있습니다... cdZDir() { cd /usr/src;make;install }
그런 다음 함수를 직접 호출하면 됩니다.
답변1
cd
영향을 미친다현재의쉘과 그 자손. 쉘 스크립트는 새로운 쉘 프로세스에서 실행되므로 cd
스크립트의 a는 스크립트 실행의 나머지 부분과 실행되는 모든 프로그램에만 영향을 미칩니다.
pwd
와 같은 명령어를 입력하면ls
스크립트를 입력하고,그 후에 는 성공cd
했음을 알 수 있습니다.cd
스크립트에서.- 라고 말하면
. ./Test.sh
현재 (주) 쉘 프로세스가Test.sh
그 안에 있는 명령을 읽고 실행합니다. 그러면 현재(주) 쉘 프로세스가 새 디렉토리에 위치하게 되는 것을 볼 수 있습니다.