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个的位置。
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个的位置。
从你的执行命令来看,二者一般是不会冲突的,因为它们是完全两个独立的进程,而且有各自的环境。
当然,如果程序中有一些通过共用文件来进行数据交换的情况,则还是可能有数据冲突。这需要分析具体的脚本来判断啦,你现在给的信息判断不了。
已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答793 阅读✓ 已解决
2 回答3.2k 阅读
不会,因为你这两个脚本都是在子进程执行的。Shell的执行有隔离性,也就是不同进程(即使是父子进程)都是在各自的运行环境执行,互相隔离,互不影响。
如果期望在当前shell执行命令,而不是fork一个子进程执行,应该使用
source
命令。source
你可以理解为将脚本的内容拷贝到当前终端执行,所以是在当前shell环境下执行,而不是子进程执行。