bash에서 ‘dot space filename’명령은 무엇입니까? 넣기 대신 나를 보여주었습니다.

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

export FOO=bar
export FIZZ=buzz

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

. exports.txt

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

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

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



답변

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

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


답변

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

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, 당신이 그것을 이름), 거기 디렉토리를 변경, 아무것도하지 않고 닫힙니다. 두 번째 예제는 메인 쉘에서 실행되므로 디렉토리가 변경됩니다!


답변

다음은 예입니다.

스크립트 파일 : mytest.sh

cat mytest.sh

#!/bin/bash

myvar=1
mystring="Hello World"

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

echo $myvar

하지만 네가하면

. mytest.sh

또는

source mytest.sh

그리고

echo $myvar

그것은 인쇄됩니다 1

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


답변