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