bash 스크립트를 실행하는 다음 두 가지 방법이 동일한지 궁금합니다.
. ./myScript.sh source myScript.sh
- 둘 다 스크립트를 실행하는 대신 스크립트의 내용을 실행합니까? 즉, 스크립트 실행을 위한 하위 쉘을 생성하지 않습니까?
답변1
그들은 정확히 동일한 작업을 수행하기 때문에 bash에서 동일합니다. 반면에
source
5자 더 길고 POSIX 전용 쉘이나 Bourne에 이식할 수 없는 반면.
(점)은 이식 가능하므로source
.맞습니다. 파일을 가져오는 것은 현재 쉘에서 명령을 실행하며 이는 현재 쉘 환경에 영향을 미칩니다. 여전히 소스 파일에 인수를 전달할 수 있으며 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
. 일부 가벼운 쉘은 source
POSIX .
에서만 지정된 것처럼 , ksh
, dash
등 ash
은 그렇지 않을 수 있습니다 source
. 참조jw013의 답변참고용. )