这里记录的是在一个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: