Bash에서 'dot space filename' 명령은 무엇을 하고 있나요?

Bash에서 'dot space filename' 명령은 무엇을 하고 있나요?

Bash 쉘을 사용할 때, 나는 때때로 내용을 복사/붙여넣는 텍스트 파일(exports.txt)에 환경 변수를 보관합니다.

export FOO=bar
export FIZZ=buzz

누군가 복사/붙여넣기 대신 터미널에 입력할 수 있는 방법을 보여줬습니다.

. exports.txt

복사/붙여넣기와 동일한 효과를 갖습니다.

이 '도트 스페이스 파일 이름' 명령이 작동하는 메커니즘은 무엇입니까? 이에 대한 검색어를 생각하기가 어렵습니다.

나는 무슨 일이 일어나고 있는지, 그리고 이 한 줄짜리 작업이 수행하는 작업에 대한 보다 일반적인 세부 사항을 이해하고 싶습니다.

답변1

("점") 명령 .은 쉘 내장 source명령의 동의어/단축키입니다.

이는 명명된 쉘 스크립트를 읽고 현재 쉘 컨텍스트 내에서(하위 쉘이 아닌) 실행하도록 합니다. 이를 통해 소스 스크립트는 변수 설정, 셸 함수 및 별칭 정의 등 호출 셸의 환경을 수정할 수 있습니다.

답변2

기존의 두 가지 답변은 이미 훌륭하지만, 말하자면 효과가 가장 "눈에 띄는" 예가 누락된 것 같습니다.

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$

두 번째 경우에 메인 셸의 작업 디렉터리가 어떻게 변경되었는지 확인하세요!

이는 (다른 답변에서 지적했듯이) 첫 번째 예제가 자체 하위 쉘에서 실행되기 때문입니다( -command sh로 시작하는 프로세스 sh는 기본적으로 모든 쉘일 수 bash있으며 dash이름을 지정). 아무것도 하지 않고 닫힙니다. 두 번째 예제는 메인 셸에서 실행되므로 디렉터리가 변경됩니다!

답변3

여기에 예가 있습니다.

스크립트 파일: mytest.sh

cat mytest.sh

#!/bin/bash

myvar=1
mystring="Hello World"

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

echo $myvar

하지만 만약 그렇게 한다면

. mytest.sh

또는

source mytest.sh

그런 다음

echo $myvar

1이 인쇄됩니다

Spiff가 쓴 내용에 대한 시각적 답변

관련 정보