소스 파일과 ./.sh 파일 사용의 차이점

소스 파일과 ./.sh 파일 사용의 차이점

위 주제가 이전에 논의된 것으로 알고 있습니다.

  • source.sh 파일, sh 파일 사용 후 환경 변수 유지
  • 그리고 ./.sh 파일이 완료되면 환경 변수가 손실됩니다.

그러나 다음 스크립트가 있습니다.makefile.sh

#!/bin/sh
echo $(pwd)

export PATH=$PATH:$PWD

## source the environment
source environment-setup

위 파일을 사용하면 sourcePATH를 내보내지 않아도 성공적으로 완료됩니다. 그러나 ./위 파일을 사용하면 ./makefile.sh: 7: ./makefile.sh: source: not found.

environment-setup와 관련하여 이것을 넣었습니다 . makefile.sh우리가 더 해야 할 일이 있나요? 아니면 source과 `./ 사이의 미묘한 차이점이 누락된 것인가요?

인사

답변1

Shebang의 결과로 대신 을 #!/bin/sh사용하고 있습니다 .shbash

source은 쉘 내장이지만 bash소싱하는 스크립트에는 해당되지 않으며 환경에 존재하지 않으므로 스크립트를 실행할 때 오류가 발생합니다.shsource./

문제를 해결하는 방법에는 두 가지가 있습니다.

  1. shebang을 변경하면 시스템에 사용 가능한 쉘이 있고 에서 찾을 수 있다고 #!/bin/bash가정합니다 .bash/bin

  2. 마지막 줄을 다음으로 변경하십시오.

    . environment-setup
    

.sourcein sh및 in 및 일부 다른 쉘과 bash동일한 기능을 가지고 있습니다 . environment-source파일이 실행 중인 스크립트의 현재 작업 디렉터리에 없는 경우 파일의 절대 경로를 사용하여 당시의 cwd가 무엇인지에 관계없이 작동하는 것이 좋습니다 .

. /path/to/environment-setup

관련 정보