我有一个运行另一个bash脚本的bash脚本,但是第一个bashscript在继续之前没有等待第二个bashscript完成,我怎么能强迫它等待呢?
例如:
#!/bin/bash
# first.sh
#call to secondary script
sh second.sh
echo "second.sh has completed"
echo "continuing with the rest of first.sh..."
现在的方式,它将运行second.sh,并继续,而不必等待second.sh完成。
答案 0 :(得分:17)
我在几个脚本中使用这样的方案 - 只需使用source
在同一个shell-copy中调用第二个脚本。
在script-1
:
source script2.sh
或:
. script2.sh
所以 - script-1
中的任何一个命令都不会继续,直到script2.sh
结束所有任务。
很少的例子。
第一个脚本:
$ cat script-1.sh
#!/bin/bash
echo "I'm sccript $0."
echo "Runnig script-2..."
source script-2.sh
echo "script-2.sh finished!"
第二个脚本:
$ cat script-2.sh
#bin/bash
echo "I'm script-2. Running wait operation..."
sleep 2
echo "I'm ended my task."
工作原理:
$ ./script-1.sh
I'm sccript ./script-1.sh.
Runnig script-2...
I'm script-2. Running wait operation...
I'm ended my task.
script-2.sh finished!
答案 1 :(得分:14)
通常情况确实如此;其他事情正在发生。你确定其他脚本没有在后台运行吗?无论如何,您都可以尝试使用wait
。
答案 2 :(得分:7)
您可以在执行第二个脚本后添加命令wait
,它将等待您从主体脚本启动的所有进程
您甚至可以在调用第二个脚本后直接使用命令echo $!
恢复第二个脚本的PID,然后将此PID作为参数传递给wait
命令
答案 3 :(得分:1)
尝试使用bash second.sh
并检查你的second.sh并确保你没有在后台运行的程序
答案 4 :(得分:0)
另一种方法$(second.sh)