
test.shファイルに繰り返しスクリプトがあり、バックグラウンドプロセスが完了した後に「running_script2.sh」スクリプトを実行しようとしましたが、これを試しましたが機能しません。
for id in 1 2 3
do
bash running_script1.sh $id & (#complete 1 minute/looping)
done
wait
echo "running script2 ..."
bash running_script2.sh
労働時間:
bash running_script1.sh 1 &
bash running_script1.sh 2 &
bash running_script1.sh 3 &
wait
echo "running script2 ..."
bash running_script2.sh
しかし効率的ではありません
答え1
間に意味の違いはありません。
for id in 1 2 3
do
bash running_script1.sh $id & (#complete 1 minute/looping)
done
そして
bash running_script1.sh 1 &
bash running_script1.sh 2 &
bash running_script1.sh 3 &
wait
echo "running script2 ..."
bash running_script2.sh
time
以下のデモスクリプトは、条件付きコマンドに関係なく3秒間実行できます(可能true
)。false
#!/bin/sh -eu
for i in 1 2 3; do
echo "sleep $i" > $i && chmod +x $i
done
if false; then
for i in 1 2 3; do
bash ./$i &
done
else
bash ./1 &
bash ./2 &
bash ./3 &
fi
wait
それでも違いがある場合は投稿してください。マクウェイ。
答え2
これが正しい方法かどうかはわかりませんが、screenを使用してスクリプトを実行します。
screen は bg でプロセスを実行する仮想端末です。
for id in 1 2 3
do
screen -d -m bash script1.sh $id
done
wait
echo "running script2 ..."
bash script2.sh
screen -d -m はスクリプトを実行し、スクリプトが完了すると画面を閉じます。
screenを使用すると、script1の出力を標準出力にインポートできないため、ファイルを使用してscript1の出力を保存します。