今天在shell中写了一个cd目录,当使用./执行shell脚本,当脚本执行结束之后发现还在当前的路径,路径并未发生改变。下面说一下使用. 和./执行的不同效果。
首先写一个简单的测试sh;
#!/bin/sh
echo "before dir: `pwd`"
cd /home
echo "after dir: `pwd`"
下面看一下使用 ./shellName.sh 的执行现象:
在执行后目录又回到了改变之前的路径
再看一下使用 . shellName.sh 的执行现象:
可以明显的看到使用上面这种方式执行之后路径发生改变,达到了预期的效果。
在使用./执行脚本时会在打开一个新的子shell来运行脚本的内容,脚本中的内容也只在子shell的生命周期内生效,当退出之后,有回到了当前shell的环境。
而在使用. 执行时不会去新建一个子shell来执行脚本内容,所以对当前shell生效。