bash에서 'dot space filename'명령은 무엇입니까?


30

bash 쉘을 사용할 때 때로는 환경 변수를 텍스트 파일에 보관하여 내용을 복사 / 붙여 넣습니다 (예 : exports.txt).

export FOO=bar
export FIZZ=buzz

누군가 복사 / 붙여 넣기 대신 나를 보여주었습니다. 터미널에 입력 할 수 있습니다.

. exports.txt

복사 / 붙여 넣기와 같은 효과가 있습니다.

이 'dot space filename'명령이 작동하는 메커니즘은 무엇입니까? 검색어를 생각하기가 어렵습니다.

나는 무슨 일이 일어나고 있는지, 그리고이 one-liner가하는 일에 대한 더 일반적인 세부 사항을 이해하고 싶습니다.


23
실행 help . Stack Exchange 엔진이 너무 짧아서 설명하기에는 너무 짧다고 생각합니다.
와일드 카드

5
이 모든 질문이이 사이트에서도 왜 발생하는지 궁금합니다. 이것들은 Stack Overflow , Ask UbuntuUnix & Linux 에서 여러 번 답변되었습니다 .
fedorqui

점 공간을 실행하려면 '. ' args작은 따옴표 나 큰 따옴표를 사용하여을 입력해야 합니다. 그렇지 않으면 인용 부호없는 공간은 줄을 토큰으로 구문 분석 할 때 bash에 의해 사용됩니다 (bash 매뉴얼의 "단어 분할"참조).
Peter Cordes

1
bash에서의 대체 이름은 .is source입니다. 문자 그대로 "이 파일의 소스 명령"을 의미합니다.
jpaugh

답변:


40

.( "점") 명령의 동의어 / 바로 가기 인 쉘의 내장 source명령.

이름 지정된 쉘 스크립트가 서브 쉘이 아닌 현재 쉘 컨텍스트 내에서 읽히고 실행되도록합니다. 이를 통해 소스 스크립트는 변수 설정 및 쉘 기능 및 별명 정의와 같은 호출 쉘의 환경을 수정할 수 있습니다.


49
실제로 POSIX에서 정의한 "dot"( ) 명령의 source비표준 및 이식 불가능한 동의어 / 바로 가기 는 다른 방법이 아닙니다. .
terdon

8
bash는 비 POSIX 모드에서 비표준 source및 비표준을 제공 .합니다. 둘 다 현재 디렉토리가에 속하지 않더라도 검색합니다 $PATH. POSIX 모드에서는 .현재 디렉토리를 검색하지 않는 표준 을 제공합니다 source. 두 모드 모두 sourcePOSIX의 .명령 과 동의어입니다 .
hvd

26

기존의 두 가지 대답은 이미 훌륭하지만 그 효과가 가장 "눈에 잘 띄는"예가 빠져 있다고 생각합니다.

script.sh다음 내용 의 파일이 있다고 가정 해보십시오 .

cd dir

이 스크립트를 정상적으로 실행하면 ( sh script.sh) 다음과 같이 표시됩니다.

olle@OMK2-SERVER:~$ sh script.sh
olle@OMK2-SERVER:~$

그러나 스크립트를 어디에서 소스 ( . script.sh)하면 다음과 같이 끝납니다.

olle@OMK2-SERVER:~$ . script.sh
olle@OMK2-SERVER:~/dir$

두 번째 경우 주 쉘의 작업 디렉토리가 어떻게 변경되었는지 주목하십시오!

자신의 서브 쉘의 첫 번째 예제 실행 (다른 답변에서 뾰족한 아웃으로)합니다 (때문입니다 sh우리는 시작 과정 sh- 명령이 기본적으로왔다 수있는 쉘, bash, dash, 당신이 그것을 이름), 거기 디렉토리를 변경, 아무것도하지 않고 닫힙니다. 두 번째 예제는 메인 쉘에서 실행되므로 디렉토리가 변경됩니다!


4

다음은 예입니다.

스크립트 파일 : mytest.sh

cat mytest.sh

#!/bin/bash

myvar=1
mystring="Hello World"

위의 변수 중 하나를 인쇄하려고하면 아무것도 얻지 못합니다.

echo $myvar

하지만 네가하면

. mytest.sh

또는

source mytest.sh

그리고

echo $myvar

그것은 인쇄됩니다 1

Spiff가 쓴 것에 대한 시각적 인 대답


따라서 예제를 해석 export하면 해당 변수를 서브 쉘에서 사용하는 경우에만 사용합니다. export변수가 현재 쉘에서만 사용된다면 파일에서 생략 할 수 있습니다. 맞습니까?
iancoleman

1
아주 그렇습니다. 그러나 쉘 환경 변수에 대해 생각하면 export 명령을 사용하는 것이 더 유용하거나 이해하기 쉽습니다. 예를 들어 $ HOME 또는 $ DISPLAY입니다. 예, export 명령을 사용하여 셸 세션 또는 하위 셸에서 변수를 내보낼 수 있지만 해당 세션을 종료하자마자 사라집니다.
raism
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.