標籤:
這裡記錄的是在一個shell指令碼裡面使用
. ./file.sh 和
./file.sh 的區別,本文參考了http://www.lslnet.com/linux/dosc1/39/linux-283534.htm (這個藍森林的東西應該是來源於chinaunix)
來個小實驗
情境一:
vi file1.sh
./file2.sh
echo $NIVEK
vi file2.sh
NIVEK=goupi
export NIVEK
chmod 755 file1.sh file2.sh
$./file1.sh
//沒有任何輸出
$
情境二:
vi 1file.sh
. ./2file.sh
echo $NIVEK
vi 2file.sh
NIVEK=goupi
export NIVEK
chmod 755 1file.sh 2file.sh
$./1file.sh
goupi //在2file.sh裡面export 的變數NIVEK的值
$
由此可以看到它們的區別,即
./file.sh 將重啟一個新的子shell來執行它,所以如果在file.sh中定義的一些變數(export)只在子shell有作用,返回後將失去作用.
. ./file.sh 不啟動新的shell,在當前shell中執行,所以在file.sh中定義的變數返回後依然有作用.
再看一下這個簡單的例子:
cat 1.sh
#!/bin/bash
sleep 1
exit 1
cat test1.sh
#!/bin/bash
./1.sh
echo "can you see me"
cat test2.sh
#!/bin/bash
. ./1.sh
echo "can you see me"
分別執行test1.sh, test2.sh從它們的區別裡面可以看到一些不同
reference:
http://blog.chinaunix.net/uid-20652643-id-1906458.html
[轉]shell中 source命令即點空格後面再跟可執行檔的說明