获取Bash中最后运行程序的名称

时间:2010-11-16 18:09:32

标签: bash

我有一个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

这似乎是我想要的。为什么不同? 在脚本中获取上一个命令名称的最简单方法是什么?

2 个答案:

答案 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部分。