[英]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.