![如何在几个后台作业后执行unix命令?](https://linux22.com/image/150558/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%87%A0%E4%B8%AA%E5%90%8E%E5%8F%B0%E4%BD%9C%E4%B8%9A%E5%90%8E%E6%89%A7%E8%A1%8Cunix%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我的 c-shell 代码必须在执行某些 UNIX 命令之前完成一些并发后台作业。然而,不知何故,在代码中我的后台作业永远不会返回 unix 命令的句柄。
IE
$cmd1 | tee $XD/m1.log&
$cmd2 | tee $XD/m2.log&
$cmd3 | tee $XD/m3.log&
$cmd4 | tee $XD/m4.log&
上面提到的所有 4 个命令都会生成 4 个不同的文件,名为$L1
、$L2
、$L3
和$L4
(setenv L1 $XD/div.txt
等)。我需要在删除第一行后合并所有这些文件,因此使用了以下逻辑。但似乎sed
命令永远不会被执行
wait $!
echo "Job completed"
sed -i '1d' $L2
sed -i '1d' $L3
sed -i '1d' $L4
cat $L1 $L2 $L3 $L4 >> $L
如何让然后执行后台作业?
尝试过
if (! -e $L4 ) then
if ( -f $L4 ) then
wait $!
echo "Job completed"
sed -i '1d' $L2
sed -i '1d' $L3
sed -i '1d' $L4
cat $L1 $L2 $L3 $L4 >> $L
endif
endif
但也没有用。
$cmd1 | tee $XD/m1.log&
$cmd2 | tee $XD/m2.log&
$cmd3 | tee $XD/m3.log&
$cmd4 | tee $XD/m4.log&
if (! -e $L4 ) then
if ( -f $L4 ) then
wait $!
echo "Job completed"
sed -i '1d' $L2
sed -i '1d' $L3
sed -i '1d' $L4
cat $L1 $L2 $L3 $L4 >> $L
endif
endif
预期结果是生成$L
文件 ( $XD/final.txt
),只有当脚本返回到包含 sed 命令的第二半部分时才会发生这种情况。
简而言之,我正在寻找一种方法来确保在脚本中转移到 sed 命令之前完成所有四个 cmd* 作业。由于 sed 命令的输入取决于使用 cmd* 命令生成的输出文件,因此它们必须按顺序排列。正在寻找方法,但目前还没有找到任何办法。