繁体   English   中英

当 python 代码返回 sys.exit(1) 时如何退出 shell 脚本

[英]how to exit shell script when python code returns sys.exit(1)

#!/usr/bin/env bash
set -x

function createContent() {
python - <<END
import sys
if(true):
  print('true')
else:
  sys.exit(1)  
END
}

if [ "${CREATE_REQUEST}" != "" ]; then
  createContent
fi

#next operations

这是一个 shell 脚本。 在那里定义了 python 方法,称为createContent 设置CREATE_REQUEST环境变量时调用该方法。 问题是,当createContent运行sys.exit(1)时, python function 会中断,但 shell 脚本不会在那里退出。 shell 脚本中的所有其他剩余代码继续执行。 为什么会发生这种情况以及如何确保如果 python 以sys.exit(1)退出,则调用代码要么处理它,要么 shell 只返回具有正确退出代码的控件。

默认情况下,如果命令返回非零(失败),shell 脚本不会退出。 您可以使用set -e设置此行为。

如果您不想为整个脚本set -e ,则可以仅将其添加到 function 中:

createContent () {
python - <<"END" || exit 1
# python code
"END"
}

您也可以仅针对特定的错误代码退出:

python - <<"END"; (($?==1)) && exit 1

您应该双引号END ,以确保脚本文本逐字传递(不带引号的文本受 shell 扩展的约束)。

如果您不希望它默认内置到 function 中,您可以在调用 function 时添加相同的逻辑:

createContent || exit 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM