2つの部分で構成されたスクリプトを作成しようとしています。 1つ目は初期動作状態、2つ目は平衡システムです。問題は、2番目のプロセスが最初のプロセスに依存しているため、2番目のプロセスを実行する前に最初のプロセスを終了する必要があることです。どうすればいいですか?
私が実行しているコードは次のとおりです。
#!bin/sh
echo -n "Imput Chemical Potential:"
read chem
awk < towhee_input -v n="-$chem" 'NR==12 {$0=n}{print}'> towhee_input1
echo -n "Imput nstep initial:"
read nstepi
r=5
declare -i p
pi=$nstepi/$r
awk < towhee_input1 -v k="$nstepi" 'NR==18 {$0=k}{print}'> towhee_input2
awk < towhee_input2 -v t="$pi" 'NR==22 {$0=t}{print}'> towhee_input3
awk < towhee_input3 -v t="$pi" 'NR==24 {$0=t}{print}'> towhee_input4
awk < towhee_input4 'NR==82 {$0=".true."}{print}'> towhee_input5
##### (i wont that process finish first and then continue the script)
towhee towhee_input5 > output &
##### (i wont that process finish first and then continue the script)
cp towhee_final towhee_initial
echo "Run again?"
read wwwww
u=5
declare -i nstep
nstep=$nstepi*$u
declare -i p
p=$pi*$u
awk < towhee_input5 -v k="$nstep" 'NR==18 {$0=k}{print}'> towhee_input6
awk < towhee_input6 -v t="$p" 'NR==22 {$0=t}{print}'> towhee_input7
awk < towhee_input7 -v t="$p" 'NR==24 {$0=t}{print}'> towhee_input8
awk < towhee_input8 'NR==82 {$0=".false."}{print}'> towhee_input9
towhee towhee_input9 > towhee.prod &
どうすればいいですか?
答え1
&
最後のものだけを削除してください。
towhee towhee_input5 > output &
シェルは&
バックグラウンドで実行することを意味します。プロセスがフォアグラウンドで実行されるようにするには、そのプロセスを削除すると、スクリプトが終了するとスクリプトが実行されます。
編集する
バックグラウンドでコマンドを実行して待つには、次のようにします。wait
towhee towhee_input5 > output &
wait
continue your code...
このコードは、以前にバックグラウンドで開始されたすべてのコマンドを待ちますが、最新のバックグラウンドコマンドのPIDを含む変数としてwait $!
使用することもできます。bash組み込みコマンドは通常waitを使用します。 PIDを引数固有のプロセスとして使用します。$!
wait