"." 및 "소스"를 사용하여 스크립트를 실행합니다.

"." 및 "소스"를 사용하여 스크립트를 실행합니다.
  1. bash 스크립트를 실행하는 다음 두 가지 방법이 동일한지 궁금합니다.

    . ./myScript.sh
    
    source myScript.sh
    
  2. 둘 다 스크립트를 실행하는 대신 스크립트의 내용을 실행합니까? 즉, 스크립트 실행을 위한 하위 쉘을 생성하지 않습니까?

답변1

  1. 그들은 정확히 동일한 작업을 수행하기 때문에 bash에서 동일합니다. 반면에 source5자 더 길고 POSIX 전용 쉘이나 Bourne에 이식할 수 없는 반면 .(점)은 이식 가능하므로 source.

  2. 맞습니다. 파일을 가져오는 것은 현재 쉘에서 명령을 실행하며 이는 현재 쉘 환경에 영향을 미칩니다. 여전히 소스 파일에 인수를 전달할 수 있으며 bash는 실제로 $PATH일반 명령처럼 파일 이름을 찾습니다(파일 이름에 슬래시가 포함되어 있지 않은 경우).


.vs 의 원래 질문과 관련이 없지만 source귀하의 예에서는

. ./myScript.sh 

같지 않음

source myScript.sh

왜냐하면 while .source기능은 동일 myScript.sh하지만 ./myScript.sh동일하지는 않기 때문입니다. 슬래시가 포함되어 있으므로 ./myScript.sh경로로 해석되어 쉘에서는 슬래시가 ./myScript.sh없으므로 myScript.sh$PATH에서 먼저 검색합니다. 이것은POSIX 지정 표준의 행동 .. 대부분의 셸은 기본적으로 이 작업을 수행하지만 확장 기능(예: 경로 검색 후 현재 작업 디렉터리에서 검색)이나 ./behavior 를 변경하는 옵션을 추가할 수도 있습니다 source.

답변2

예, 동일합니다. 기능적 차이는 없습니다. .단지 내장된 동의어뿐입니다 source.

bash(편집: 분명히 이것은 및 에만 적용됩니다 zsh. 일부 가벼운 쉘은 sourcePOSIX .에서만 지정된 것처럼 , ksh, dashash은 그렇지 않을 수 있습니다 source. 참조jw013의 답변참고용. )

관련 정보