위 주제가 이전에 논의된 것으로 알고 있습니다.
source
.sh 파일, sh 파일 사용 후 환경 변수 유지- 그리고
./
.sh 파일이 완료되면 환경 변수가 손실됩니다.
그러나 다음 스크립트가 있습니다.makefile.sh
#!/bin/sh
echo $(pwd)
export PATH=$PATH:$PWD
## source the environment
source environment-setup
위 파일을 사용하면 source
PATH를 내보내지 않아도 성공적으로 완료됩니다. 그러나 ./
위 파일을 사용하면 ./makefile.sh: 7: ./makefile.sh: source: not found
.
environment-setup
와 관련하여 이것을 넣었습니다 . makefile.sh
우리가 더 해야 할 일이 있나요? 아니면 source
과 `./ 사이의 미묘한 차이점이 누락된 것인가요?
인사
답변1
Shebang의 결과로 대신 을 #!/bin/sh
사용하고 있습니다 .sh
bash
source
은 쉘 내장이지만 bash
소싱하는 스크립트에는 해당되지 않으며 환경에 존재하지 않으므로 스크립트를 실행할 때 오류가 발생합니다.sh
source
./
문제를 해결하는 방법에는 두 가지가 있습니다.
shebang을 변경하면 시스템에 사용 가능한 쉘이 있고 에서 찾을 수 있다고
#!/bin/bash
가정합니다 .bash
/bin
마지막 줄을 다음으로 변경하십시오.
. environment-setup
.
source
in sh
및 in 및 일부 다른 쉘과 bash
동일한 기능을 가지고 있습니다 . environment-source
파일이 실행 중인 스크립트의 현재 작업 디렉터리에 없는 경우 파일의 절대 경로를 사용하여 당시의 cwd가 무엇인지에 관계없이 작동하는 것이 좋습니다 .
. /path/to/environment-setup