为什么bash在脚本退出后发送调试信号?

为什么bash在脚本退出后发送调试信号?,bash,Bash,我正在学习bash的调试信号 以下是我重新生成问题现象的测试代码。所以它没有太多意义。请不要在意细节。 它准备了两个陷阱,一个是由退出信号调用的,用于最初清理时态脚本,但在这里它是一个伪函数。第二个由调试信号调用,以计算调试器正在扫描的行。 我的问题是,调试信号可能会在LINENO=0的clean\u up\u调试器中显示。为什么当时的行号是0?在bash-x的输出之后,我添加了问题的细节。请告诉我为什么会这样。 多谢各位 #!/bin/bash # file name is debug.wor

我正在学习bash的调试信号

以下是我重新生成问题现象的测试代码。所以它没有太多意义。请不要在意细节。 它准备了两个陷阱,一个是由退出信号调用的,用于最初清理时态脚本,但在这里它是一个伪函数。第二个由调试信号调用,以计算调试器正在扫描的行。 我的问题是,调试信号可能会在LINENO=0的clean\u up\u调试器中显示。为什么当时的行号是0?在bash-x的输出之后,我添加了问题的细节。请告诉我为什么会这样。 多谢各位

#!/bin/bash
# file name is debug.working

source "bash_debugger_functions.sh"

trap clean_up_debugger_func EXIT

no_of_line_until_here=${LINENO}  # *** no_of_line_until_here is 12 ***
trap "show_line_scanned \$(( \${LINENO} - ${no_of_line_until_here} - 1 ))" DEBUG
#!/bin/bash

echo "echo_sring = $1"
下面是一个库文件

#!/bin/bash 
# file name is 'bash_debugger_functions.sh'

clean_up_debugger_func() {
  echo "dummy"
}

show_line_scanned() {
  echo "At line $1"
}
下面是bash-x debug.working输出的一部分

+ (debug.working:17): echo 'echo_sring = test_message'
++ (debug.working:1): show_line_scanned -12
在调用“echo'echo\u sring=test\u message'”之后,使用负值-12调用show\u line\u scanned。直到这里的_等于+12,才有_行的_。所以当时LINENO似乎是0。我不知道为什么在这里调用show_line_scanned,因为我假设调试信号在每一行被调度,但在“echo”echo_sring=$1”之后没有新行。我想知道为什么LINENO在这里是0。 请教我这里的机械装置

我假设调试信号在每一行被调度,但在“echo”echo\u sring=$1”之后没有新行

仍然有一行在
debug.working
脚本的最后一行之后执行,因为您设置了
trap clean\u debugger\u func EXIT
命令,对于该
clean\u debugger\u func
命令,您会得到令您困惑的调试命令分派

我想知道为什么LINENO在这里是0

此时脚本的执行刚刚结束,
manbash
说明了
LINENO

当不在 脚本或函数,替换的值不保证 要有意义

我假设调试信号在每一行被调度,但在“echo”echo\u sring=$1”之后没有新行

仍然有一行在
debug.working
脚本的最后一行之后执行,因为您设置了
trap clean\u debugger\u func EXIT
命令,对于该
clean\u debugger\u func
命令,您会得到令您困惑的调试命令分派

我想知道为什么LINENO在这里是0

此时脚本的执行刚刚结束,
manbash
说明了
LINENO

当不在 脚本或函数,替换的值不保证 要有意义