xxx.sh
中的伪代码
a large loop {
python xxx.py
}
当我在python中运行此脚本./xxx.sh
和一些错误时,异常信息将反复提升到stdout。
如果我按 ctrl + c ,信号将被python捕获,如果我按 ctrl + z ,xxx.sh
将进入睡眠状态背景。
所以,我试图添加一些陷阱代码来捕捉 ctrl + z ,
我的xxx.sh
function stop_ctrl_z() {
echo $$
pkill -9 $$
}
trap stop_ctrl_z SIGTSTP
但xxx.sh
遇到 ctrl + z 时无法阻止自己。
它挂起,遗憾的是我必须打开另一个终端并使用pkill -9 xxx.sh
来停止此脚本。
^Z^Z^Z^Z^Z^Z^Z^Z^Z^Z
有人有解决方案来解决我的问题吗?
答案 0 :(得分:1)
只是在Python调用失败时强制退出:
python xxx.py || exit 1
您可以使用break
代替exit
来离开循环。通过评估$?
可以实现更高级的错误处理;这里是一个如何存储返回值并重用它的例子:
python xxx.py
result=$?
if [ ${result} -ne 0 ]; then
# Error
echo "xxx.py exited with ${result}"
...
else
# Success
...
fi
作为一般规则,不仅要考虑Bash脚本,还要考虑编程,始终检查命令的返回代码以查找错误并处理它们。从长远来看,它使调试和您的工作生活变得更加容易。