如果收到ctrl z,bash脚本怎么能自杀呢?

时间:2018-01-30 06:44:17

标签: linux bash

我的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

有人有解决方案来解决我的问题吗?

1 个答案:

答案 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脚本,还要考虑编程,始终检查命令的返回代码以查找错误并处理它们。从长远来看,它使调试和您的工作生活变得更加容易。