"로 스크립트 실행. ”및“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
파일의 제공 경로가이 포함되지 않은 동작은 /쉘에 따라 다르며에 대한 bash과 zsh는 POSIX 모드가 활성화 여부에 따라 달라집니다. 또한 많은 ksh 구현에서와 .다르게 동작 source합니다.
— Stéphane Chazelas

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

8

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

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


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

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