在shell中,內建(builtin)命令句點“.”和source用法相同,格式以下:
. filename [arguments]
source filename [arguments]
句點命令和source的作用相同,都是從腳本filename中讀取命令并履行它們,若指定了參數arguments,參數便成為對應的位置參數。命令履行的退出狀態為履行的最后1個命令的退出狀態,沒有履行任何命令時,退出狀態為0,若filename不存在,退出狀態為1,需要注意的是,這個腳本的履行是在當前shell環境下完成的,履行結果會影響當前shell,而普通的腳本履行則是在子shell中,履行結果不影響當前shell,下面舉例說明二者的區分。
測試腳本test.sh:
#!/bin/bash
var=test
普通用法:
$ var=foo
$ echo $var
foo
$ bash test.sh
$ echo $var
foo
使用source命令履行腳本:
$ var=foo
$ echo $var
foo
$ source test.sh
$ echo $var
test
從上面的例子中可以看出,使用source命令履行腳本的結果確切影響了當前shell,句點命令的效果是1樣的,如果在shell腳本中定義了某些函數,這些函數是可以直接在當前shell中使用的。以下例子所示:
$ cat test.sh
#!/bin/bash
foo()
{
echo "function foo called"
}
$ . test.sh
$ foo
function foo called
在Linux環境中,有時候我們要修改1些配置文件,比如說位于用戶主目錄下的bash配置文件“.bashrc”,這個文件的修改是在新的shell終端才生效的,這時候就能夠使用source命令履行這個文件,使之在當前shell立即生效。在許多開源項目中,都可以看到句點命令或source的用法,例如Android源碼的編譯。