如何在几个后台作业后执行unix命令?

如何在几个后台作业后执行unix命令?

我的 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$L4setenv 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* 命令生成的输出文件,因此它们必须按顺序排列。正在寻找方法,但目前还没有找到任何办法。

相关内容