
私のスクリプトで次のコマンドを実行します。
SCRIPT_1="ksh -x script1.sh & ksh -x script2.sh";
SCRIPT_2="ksh -x script3.sh & ksh -x script4.sh";
eval $SCRIPT_1;
sleep 20s;
eval $SCRIPT_2;
$SCRIPT_2
完了したら実行したいです$SCRIPT_1
。ただし、現在は別々の行で実行されているかどうかに関係なく、すべて同時に実行されます。
次のスクリプトを実行する前に他のスクリプトが完了するのを待つ方法についてのアイデアはありますか?
答え1
SCRIPT_1="ksh -x script1.sh & bg_pid=$!; ksh -x script2.sh; wait $bg_pid";
SCRIPT_2="ksh -x script3.sh & bg_pid=$!; ksh -x script4.sh; wait $bg_pid";
eval $SCRIPT_1;
sleep 20s;
eval $SCRIPT_2;
答え2
GNU Parallelを使用すると、次のことができます。
parallel ksh -x ::: script1.sh script2.sh
parallel ksh -x ::: script3.sh script4.sh