这几天由于工作需要经常和Linux shell脚本打交道,不过也是简单的使用,没有太深入地了解其中的道理,但是今天碰到了一个问题,没有解决,到网上一搜果然有高手出招!我只能说互联网真是个好东西!
这次遇到的问题是在shell脚本中编辑的cd命令与export命令并不能应用到当前的shell环境中,但后来经过查找发现个中的道理。 原来,Linux运行shell脚本程序的时候会在所处的进程(process)中分出一个子进程,也叫做fork, 那么如果直接以' ./ '的方式运行脚本的后果就是只是在子进程中执行了脚本中的cd export命令,当该脚本执行完毕后,返回到父进程后以上的命令的结果都不会保存,因为子进程已经消亡。所以解决方法就是两种:
1)使用source script_name来执行脚本,这样会迫使脚本在当前的进程中执行,eg. 脚本名为 test.sh,执行方法为:source ./test.sh
2)使用 ". ./"的方式执行脚本,其中两个dot之间是有一个空格,如1)中脚本,执行方法为:. ./test.sh
另外发现了一个牛人的文章,还是对shell 编程很有帮助,把连接贴在这里以便查找:
http://bbs.chinaunix.net/viewthread.php?tid=218853&extra=&page=1 作者:网中人

