bash 中的「點空間檔案名稱」指令是做什麼的?

bash 中的「點空間檔案名稱」指令是做什麼的?

使用 bash shell 時,我有時會將環境變數保存在一個文字檔案中,我會複製/貼上其中的內容,例如exports.txt:

export FOO=bar
export FIZZ=buzz

有人向我展示了我可以在終端機中輸入而不是複製/貼上

. exports.txt

這與複製/貼上具有相同的效果。

這個「點空間檔名」指令的工作機制是什麼?很難想到它的搜尋字詞。

我想了解正在發生的事情以及這條單線正在做什麼的更一般的細節。

答案1

(“dot”)指令.是 shell 內建source指令的同義詞/捷徑。

它會導致在目前 shell 上下文(而不是子 shell)中讀入並執行指定的 shell 腳本。這允許來源腳本修改呼叫 shell 的環境,例如設定變數和定義 shell 函數和別名。

答案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$

請注意,在第二種情況下,我們的主 shell 的工作目錄發生了變化!

這是因為(正如其他答案中所指出的)第一個範例在其自己的子 shell 中運行(sh我們以sh- 命令啟動的過程,這基本上可以是任何 shell,,,,,bashdash能想到的) ,它在那裡更改目錄,不執行任何操作並關閉。而第二個範例在我們的主 shell 中運行,因此更改了那裡的目錄!

答案3

這是一個例子。

腳本檔案:mytest.sh

cat mytest.sh

#!/bin/bash

myvar=1
mystring="Hello World"

如果您嘗試列印上述任何變量,您將一無所獲

echo $myvar

但如果你這樣做

. mytest.sh

或者

source mytest.sh

進而

echo $myvar

它將列印 1

只是斯皮夫所寫內容的視覺答案

相關內容