确保即使子脚本退出,父bash脚本也不会退出
我有两个 shell 脚本,一个是父脚本,另一个是子脚本。
父脚本的代码
#!/bin/bash
set -euo pipefail
bash /home/ubuntu/test/deploy.sh
echo "I can still do this"
子脚本代码
python -c
"""
from db_wrapper import db
import sys
query_string =
'select * from pipeline_release_status
where release_deployed_at is null'
release_status = db.run_query(db.get_environment(), query_string)
if not release_status:
sys.exit(1)
"""
if [ $? -eq 1 ]
then
echo "No release to deploy"
exit 1
fi
不管子脚本是否退出,我都不希望父脚本退出,所以我总是希望echo "i can still do this"语句总是被执行。但是在我的情况下,如果子脚本退出,那么父脚本也会退出。
我该如何防止?
回答
在父脚本的第一行,您有set -euo pipefail. 该-e选项使脚本在运行的任何命令失败时退出(退出状态不同于 0)。
您可以删除该-e选项,留下set -uo pipefail,或确保子脚本始终以 0 退出。