![脚本:第一个进程结束时运行第二个进程](https://linux22.com/image/52443/%E8%84%9A%E6%9C%AC%EF%BC%9A%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%BF%9B%E7%A8%8B%E7%BB%93%E6%9D%9F%E6%97%B6%E8%BF%90%E8%A1%8C%E7%AC%AC%E4%BA%8C%E4%B8%AA%E8%BF%9B%E7%A8%8B.png)
我正在尝试制作一个由两部分组成的脚本。第一个是运行初始状态,第二个是平衡系统。问题是第二个进程依赖于第一个进程,因此我需要在运行第二个进程之前结束第一个进程。我怎样才能做到这一点?
我正在运行的代码如下:
#!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 &
在 shell 中&
意味着放入后台执行,如果您希望进程在前台运行,则只需将其删除,脚本一旦结束就会执行。
编辑
如果您想在后台运行该命令并等待它,那么只需使用wait
towhee towhee_input5 > output &
wait
continue your code...
它应该足够了,尽管此代码会等待您之前在后台启动的每个命令,您也可以使用它,wait $!
因为$!
是一个包含最近后台命令的 PID 的变量,并且wait
bash 内置命令通常与 PID 作为参数一起使用等待特定的进程。