複数のバックグラウンドジョブの後にunixコマンドを実行するには?

複数のバックグラウンドジョブの後にunixコマンドを実行するには?

私のcシェルコードは、いくつかのUNIXコマンドを実行する前にいくつかの同時バックグラウンドタスクを完了する必要があります。しかし、私のコードでは、私のバックグラウンドタスクはunixコマンドのハンドルを返しません。

つまり

$cmd1 | tee $XD/m1.log&
$cmd2 | tee $XD/m2.log&
$cmd3 | tee $XD/m3.log&
$cmd4 | tee $XD/m4.log&

$L1上記の4つのコマンドはすべて、および(など)$L2という4つの異なるファイルを生成します。最初の行を削除した後、これらのファイルをすべてマージする必要があるため、次のロジックを使用しました。しかし、コマンドが実行されていないようです$L3$L4setenv L1 $XD/div.txtsed

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コマンドに移動する前に、4つのcmd *操作がすべて完了したことを確認する方法を探しています。 sedコマンドへの入力は、cmd *コマンドを使用して生成された出力ファイルによって異なり、順序が一致する必要があります。方法を探していますが、まだ見つかりませんでした。

ベストアンサー1

おすすめ記事