我创造了两个陷阱
trap function1 DEBUG
trap pwd ERRfunction function1 {
echo $BASH_COMMAND
}如果我使用了一些错误的命令,比如a,那么输出是->
a
bash: a: command not found
a
/home/user/dir因此,第二次调试被调用来执行pwd,但是为什么$BASH_COMMAND仍然是一个?在function1中有任何方法知道函数调用是在trap ERR中执行命令时进行的吗?
<#>编辑
两个陷阱
trap -- 'f' DEBUG
trap -- 's' ERRfunction f
{
echo "inside function f command is $BASH_COMMAND"
}
function s
{
echo "inside function s command is $BASH_COMMAND"
}输出错误的命令a,是
inside function f command is a
bash: a: command not found
inside function f command is a
inside function s command is echo "inside function s command is $BASH_COMMAND"第二个inside function f command is a,必须来自错误的陷阱。
发布于 2021-01-27 08:51:55
这可以在bash文档中找到(请参阅您的man bash),其中它在几个地方编写了关于trap各个方面的文章。
BASH_COMMAND当前正在执行或即将执行的命令,除非shell是由于一个陷阱执行命令,在这种情况下,它是在陷阱时执行的命令。
而且还
DEBUG和RETURN陷阱不会被继承,除非函数已经被赋予trace属性,或者-o functraceshell选项已经启用了集合内置(在这种情况下,所有函数都继承了DEBUG和RETURN陷阱)
如果稍微修改trap命令,就可以更清楚地看到这一点。
trap 'echo "##DEBUG## $BASH_COMMAND"' DEBUG
trap 'echo "##ERR## $PWD"' ERR
a
##DEBUG## a
-bash: a: command not found
##DEBUG## a
##ERR## /home/roaima和
f() { printf "%s..." "We are in function f()"; sleep 1; printf " OK\n"; }
f
##DEBUG## f
We are in function f()... OKhttps://unix.stackexchange.com/questions/631206
复制相似问题