以下面的 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
对我来说,最后一个更具可读性。