首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash陷阱错$BASH_COMMAND

Bash陷阱错$BASH_COMMAND
EN

Unix & Linux用户
提问于 2021-01-27 07:29:17
回答 1查看 342关注 0票数 0

我创造了两个陷阱

代码语言:javascript
复制
trap function1 DEBUG
trap pwd ERR
代码语言:javascript
复制
function function1 {
echo $BASH_COMMAND
}

如果我使用了一些错误的命令,比如a,那么输出是->

代码语言:javascript
复制
a
bash: a: command not found
a
/home/user/dir

因此,第二次调试被调用来执行pwd,但是为什么$BASH_COMMAND仍然是一个?在function1中有任何方法知道函数调用是在trap ERR中执行命令时进行的吗?

<#>编辑

两个陷阱

代码语言:javascript
复制
trap -- 'f' DEBUG
trap -- 's' ERR
代码语言:javascript
复制
function f 
{ 
    echo "inside function f command is $BASH_COMMAND"
}
function s 
{ 
    echo "inside function s command is $BASH_COMMAND"
}

输出错误的命令a,是

代码语言:javascript
复制
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,必须来自错误的陷阱。

EN

回答 1

Unix & Linux用户

发布于 2021-01-27 08:51:55

这可以在bash文档中找到(请参阅您的man bash),其中它在几个地方编写了关于trap各个方面的文章。

BASH_COMMAND当前正在执行或即将执行的命令,除非shell是由于一个陷阱执行命令,在这种情况下,它是在陷阱时执行的命令。

而且还

DEBUGRETURN陷阱不会被继承,除非函数已经被赋予trace属性,或者-o functrace shell选项已经启用了集合内置(在这种情况下,所有函数都继承了DEBUGRETURN陷阱)

如果稍微修改trap命令,就可以更清楚地看到这一点。

代码语言:javascript
复制
trap 'echo "##DEBUG## $BASH_COMMAND"' DEBUG
trap 'echo "##ERR## $PWD"' ERR

a
##DEBUG## a
-bash: a: command not found
##DEBUG## a
##ERR## /home/roaima

代码语言:javascript
复制
f() { printf "%s..." "We are in function f()"; sleep 1; printf " OK\n";  }
f
##DEBUG## f
We are in function f()... OK
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/631206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档