"로 스크립트 실행. ”및“source”


25
  1. bash 스크립트를 실행하는 다음 두 가지 방법이 동일한 지 궁금합니다.

    . ./myScript.sh
    
    source myScript.sh
  2. 스크립트를 실행하는 대신 스크립트 내용을 실행하고 있습니까 (예 : 스크립트 실행을위한 서브 쉘을 작성하지 않습니까)?

1
이봐, 맨 페이지에있다!
alex

@alex : 보여주세요. man ., man source또는 무엇 이건 아직 알 수 없다.
Tim

2
보기 type .help .
rozcietrzewiacz

man $SHELL,/source
알렉스

4
. 다른 사람들에 따르면 더 휴대 하기 편리합니다.
l0b0

답변:


21
  1. 그들은 똑같은 일을한다는 점에서 bash와 동일합니다. 반면에 source5 자 이상이며 POSIX 전용 쉘이나 Bourne으로 이식 할 수 없지만 .(점)은 사용하지 않습니다 source.

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


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

. ./myScript.sh 

와 동일하지 않다

source myScript.sh

반면 때문에 .source기능적으로 동일하며, myScript.sh./myScript.sh동일하지 않다. ./myScript.sh슬래시가 포함되어 있기 때문에 경로로 해석되며 셸은을 사용합니다 ./myScript.sh. 그러나 myScript.sh슬래시가 없으므로 쉘이 먼저 $PATH검색합니다. 에 대한 POSIX 지정 표준 동작입니다 .. 확장명 (경로 검색 후 현재 작업 디렉토리에서 검색하는 등) 또는 ./ 의 동작을 변경하는 옵션을 추가 할 수 있지만 대부분의 쉘은 기본적으로이 옵션을 사용합니다 source.


2
파일의 제공 경로가이 포함되지 않은 동작은 /쉘에 따라 다르며에 대한 bashzsh는 POSIX 모드가 활성화 여부에 따라 달라집니다. 또한 많은 ksh 구현에서와 .다르게 동작 source합니다.
Stéphane Chazelas

@StephaneChazelas 네, 맞습니다. 위의 설명이 POSIX 표준임을 명확히하기 위해 메모를 추가했습니다.
jw013

8

그렇습니다. 기능상의 차이는 없습니다. .에 대한 내장 동의어입니다 source.

(편집 : 분명히이 만 사실 bashzsh일부 가벼운 쉘은 없습니다. source단지이 .때문에 POSIX에 의해 지정 ksh, dash, ash, 등이 없을 수 있습니다 source참조하십시오. jw013의 답변 정보를.)


감사! 그러나 $ alias .출력 bash: alias: .: not found .
Tim

즉, 둘 다 내장되어 있고 별칭도 내장되어 있습니다. 이것은 문서화 되어 있지만 '동의어'는이 경우 '별칭'이 아닌 올바른 용어입니다.
Caleb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.