Bash脚本调用另一个bash脚本并在继续之前等待它完成

时间:2010-02-16 01:24:47

标签: bash

我有一个运行另一个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完成。

5 个答案:

答案 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)