linux - 当信号设置为 "DEBUG"假信号时,为什么我的陷阱不起作用?

标签 linux debugging bash shell ubuntu

#test code:

#!/bin/bash
#~/test/test.sh
trap "echo 'testmessage'" DEBUG

while :
do
echo abc
sleep 6
done

#run it
~/test$sh test.sh

==============================

#result
=>   trap: DEBUG: bad trap  

==============================

?[shell debug] 为什么当信号设置为“DEBUG”伪信号时我的陷阱不起作用,但报告陷阱错误?

最佳答案

错误信息“bad trap”是由 ash 产生的,而不是 bash。当你运行 sh test.sh 时,shebang 行是无关紧要的,因为你没有执行脚本,你正在执行名为“sh”的程序,并将“test.sh”作为参数。 sh 程序(在你的例子中是 ash 或 dash 的符号链接(symbolic link),我敢打赌)然后会尽力运行参数中指定的脚本。如果您运行命令 ./test.sh(首先需要 +x 权限),shebang 行就会发挥作用。

关于linux - 当信号设置为 "DEBUG"假信号时,为什么我的陷阱不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11280240/

相关文章:

linux - 如何在 Linux/Unix 中创建名称中包含 "/"的目录?

ruby-on-rails - 在不编辑源代码的情况下调用方法并从 Rails 控制台启动调试?

bash - 单个命令中的多个 git 命令按照编译器遇到的顺序执行

macos - 使用 lldb/Xcode 进行远程调试

java - Java:读取时文件损坏的每一行的第一个字母

node.js - 在 Node.js 中执行 bash 命令并获取退出代码

bash - 如何只打印 BASH 中的唯一行?

c - 是否有任何平台在 fd_set 上使用结构副本(对于 select() 或 pselect())会导致问题?

c - 非阻塞标准输出[C/Linux]

node.js - 如何在linux系统上运行两个node版本?