在开发工具过程中遇到一个问题:在A脚本中通过source命令来调用运行B脚本,发现运行调用完B脚本后整个脚本直接退出了,没有执行完A脚本后面的语句。
分析:退出一般是由exit,return等语句导致。查看B脚本发现函数中的返回退出语句是exit,另写一个C脚本单独调用B发现不会退出C。那么差异就出来了。
原因:因为用source调用脚本是将该脚本作为当前shell的环境执行,即不会启动一个新的子进程。而exit是退出当前进程,所以通过A脚本调用B脚本时并没有启动一个新子进程,还是在当前A的进程中执行,故exit直接退出了A。
解决办法:用 "./ "来调用(会另起一个进程),或者将函数中的exit替换成return。