2012-12-03 184 views
10

我有2个python脚本a.py和b.py 我想写一个bash脚本来加载a.py并且不运行b.py,直到a.py完成事情。 简单地运行多个python的linux bash脚本

#!/usr/bin/env bash 
python a.py 
python b.py 

但是这是天真的,一检查,看是否a.py后...我该怎么做呢?

+2

那是自然行为,同步执行。如果你想要的话(在后台运行一个并立即启动b),你应​​该在命令后附加&符号,例如'python a.py&'。 –

回答

23

这个默认情况下会一个接一个地运行。


要检查python a.py成功完成的必要条件运行python b.py,你可以这样做:

#!/usr/bin/env bash 
python a.py && python b.py 

相反,尝试运行python a.py,只有运行“蟒蛇湾PY”如果python a.py没有成功终止:

#!/usr/bin/env bash 
python a.py || python b.py 

在同一时间后台进程运行它们:

#!/usr/bin/env bash 
python a.py & 
python b.py & 

(回应评论) - 你可以连续使用此对于一行中的多个命令,例如:

python a.py && python b.py && python c.py && python d.py 
+0

这可以超过两个?如果我也有c.py,'code' python a.py && python b.py && python c.py'code'或者必须另行为c.py单独执行一行?第一个'code'蟒蛇a.py &&蟒蛇b.py'code'然后'code'python b.py &&蟒蛇c.py'code' – StudentOfScience

+0

@StudentOfScience即可=)查看更新的答案 –

+0

使用&&它给出了一个错误./bash.sh:第47行:b.py:命令没有找到,但它运行b.py如果我有它的蟒蛇b.py罚款:( – StudentOfScience

1
prompt_err() { 

echo -e "\E[31m[ERROR]\E[m"

}

prompt_ok() {

echo -e "\E[32m[OK]\E[m"

}

status() {

if [ $1 -eq 0 ]; then

prompt_ok

else prompt_err

exit -1

fi

}

a.py

status

b.py

您可以使用上面的校验码。

如果“a.py”做才把它会处理“b.py”,否则就会有“错误”退出。

+0

这也适用,我试过了Thx! – StudentOfScience

+0

最受欢迎!您也可以访问http://gettechgo.wordpress.com/2012/12/05/exit-status-shell-scripts/以查找更多信息。 –

+0

@MansabUppal每当你链接到你自己的网站时,你必须*披露。 –