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가 쓴 것에 대한 시각적 인 대답