Bash 为什么我的错误陷阱被执行为术语信号?

Bash 为什么我的错误陷阱被执行为术语信号?,bash,terminate,Bash,Terminate,在bash脚本中,我设置了两个陷阱:一个用于术语信号,另一个用于ERR信号 当我向脚本发送术语信号时,它执行ERR陷阱,而不是术语陷阱 我在两台电脑上试过。在Ubuntu 14.04.5 LTS中,脚本运行良好。另一方面。Scientific Linux 7.3(氮气),则会发生错误 以下是脚本: #!/bin/bash trap "echo caught signal SIGTERM; exit 1;" SIGTERM trap "echo caught signal SIGINT; exit

在bash脚本中,我设置了两个陷阱:一个用于术语信号,另一个用于ERR信号

当我向脚本发送术语信号时,它执行ERR陷阱,而不是术语陷阱

我在两台电脑上试过。在Ubuntu 14.04.5 LTS中,脚本运行良好。另一方面。Scientific Linux 7.3(氮气),则会发生错误

以下是脚本:

#!/bin/bash
trap "echo caught signal SIGTERM; exit 1;" SIGTERM
trap "echo caught signal SIGINT; exit 1;" SIGINT
trap "echo caught signal ERR; exit 1;" ERR

set -e
sleep 50

echo grep with err
grep sasas sasasa
当我在脚本PID上执行
kill-TERM-PID
时,我得到以下结果:

Terminated
caught signal ERR
grep with err
grep: sasasa: No such file or directory
caught signal ERR
如果
sleep
命令结束,我将得到以下结果:

Terminated
caught signal ERR
grep with err
grep: sasasa: No such file or directory
caught signal ERR
有什么问题吗?如何强制对SIGTERM信号执行术语陷阱


谢谢

大家好,欢迎来到Stack overflow。我刚刚在git bash中尝试过它,以
/script.sh&
的方式运行它,正如预期的那样,我得到了
捕获的信号SIGTERM
。你如何运行脚本?谢谢。堆栈溢出已经有了所有问题的大部分答案。太棒了。我完全按照你的方式执行。在两个Linux机器上进行了尝试。我刚刚用git bash进行了测试,它可以正常工作。可能是我的系统管理员设置的某种全局设置吗?刚刚检查过。在测试的三个bash版本中,有效的版本分别是2013年的4.3.11(1)和2016年的4.4.12(1)。不起作用的是2011年的4.2.46(1)。有人知道这可能是个问题吗?一定是因为你刚刚测试过:-)出于好奇,你能在不起作用的那个上试试吗?