我有一个bash脚本,我使用trap命令捕获错误,我希望能够打印最后一个命令的名称(失败的那个)
#!/bin/bash
function error
{
# echo program name
}
trap error ERR
# Some commands ...
/bin/false foo # For testing
我不确定在error
函数中放什么。我尝试了echo $_
,但只有在命令没有参数时才有效。我也试过!!
,但这给了我“!!:命令未找到”。在交互式提示符(也是bash)中,我得到:
$ /bin/false foo
$ !!
/bin/false foo
这似乎是我想要的。为什么不同? 在脚本中获取上一个命令名称的最简单方法是什么?
答案 0 :(得分:4)
在陷阱功能中尝试echo $BASH_COMMAND
。
来自man bash
:
BASH_COMMAND
当前正在执行或即将执行的命令, 除非shell由于陷阱而执行命令, 在这种情况下,它是在执行时执行的命令 陷阱。
答案 1 :(得分:2)
您需要设置
set -o history
引用bash手册页:
当启用set builtin的 -o history 选项时,shell将提供对命令历史记录的访问,该命令历史记录是先前键入的命令列表。使用HISTSIZE变量的值 作为要保存在历史列表中的命令数。保存最后一个HISTSIZE命令的文本(默认为500)。 shell在参数和之前将每个命令存储在历史列表中 变量扩展(参见上面的EXPANSION)但在执行历史扩展后,受shell变量HISTIGNORE和HISTCONTROL的值的限制。
通常,请阅读bash手册页中的HISTORY和HISTORY EXPANSION部分。