如果在linux shell脚本中异步调用另一个脚本,cd会相互冲突吗?

独行侠
  • 32
sh test1.sh &
sh test2.sh &

其中,test1.sh的内容:

cd path1
do xxxx

test2.sh 的内容:

cd path2
do xxxx

假设两个子sh文件都是时间较长的io操作,而且依赖当前路径。这两个子shell是异步的,相互会影响吗?会不会第1个cd后造成第2个也在这个路径,第2个cd后又使第1个去了第2个的位置。

回复
阅读 358
2 个回答

不会,因为你这两个脚本都是在子进程执行的。Shell的执行有隔离性,也就是不同进程(即使是父子进程)都是在各自的运行环境执行,互相隔离,互不影响。

如果期望在当前shell执行命令,而不是fork一个子进程执行,应该使用source命令。source你可以理解为将脚本的内容拷贝到当前终端执行,所以是在当前shell环境下执行,而不是子进程执行。

从你的执行命令来看,二者一般是不会冲突的,因为它们是完全两个独立的进程,而且有各自的环境。
当然,如果程序中有一些通过共用文件来进行数据交换的情况,则还是可能有数据冲突。这需要分析具体的脚本来判断啦,你现在给的信息判断不了。

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏