Bash 脚本中的命令是并行运行还是一个接一个运行?

Bash 脚本中的命令是并行运行还是一个接一个运行?

以下面的 shell 脚本为例:

#!/bin/bash
python do_this_first.py 
python do_this_second.py
python do_this_last.py

当我运行上述代码时,这 3 个 Python 脚本会并行运行吗?因为我希望“do_this_second”仅在“do_this_first”完成后运行。

答案1

就目前情况而言,无论是否失败,它们都会一个接一个地运行。它们只需在某个时刻退出,然后运行下一个命令。一个接一个。

如果您希望仅当先前的命令没有出现错误时才执行它们,请使用:

python do_this_first.py && python do_this_second.py && python do_this_last.py

这里,两个 & 符号的作用类似于逻辑AND。只有当第一个脚本正常退出时,第二个脚本才会运行,只有当第二个脚本无错误运行时,第三个脚本才会运行。如果出现任何错误,则以下命令都不会运行。


但是,如果你想并行运行它们,你可以这样做 - 但还有很多其他选择:

python do_this_first.py &
python do_this_second.py &
python do_this_last.py &

答案2

bash 是顺序执行的。一开始,do_this_first.py 文件将被解释。python 执行完该文件后,控制权再次移交给 bash。bash 依次执行 python do_this_second.py,依此类推。
因此,本质上,do_this_first 启动并完成,do_this_second 启动并完成,然后 do_this_last 启动并完成。

答案3

作为響克说,以下是一个选择。

python do_this_first.py && python do_this_second.py && python do_this_last.py

或者您可以设置 -e,如果某一行返回错误代码,它将立即退出。

#!/bin/bash

# Exit immediately if a command exits with a non-zero status.
set -e

python do_this_first.py 
python do_this_second.py
python do_this_last.py

对我来说,最后一个更具可读性。

相关内容