获取Bash中上次运行的程序的名称

获取Bash中上次运行的程序的名称,bash,Bash,我有一个bash脚本,使用trap命令捕获错误,我希望能够打印最后一个命令(失败的命令)的名称 我不确定在error函数中放入什么。我尝试了echo$\uz,但只有当命令没有参数时,这才有效。我还尝试了但这会给我“!!:未找到命令”。在交互式提示(也是bash)下,我得到: 这似乎正是我想要的。为什么不同? 获取脚本中上一个命令的名称的最简单方法是什么?您需要设置 set -o history set-o历史 要引用bash手册页面: 当set builtin的-o history选项被启用时,

我有一个bash脚本,使用trap命令捕获错误,我希望能够打印最后一个命令(失败的命令)的名称

我不确定在
error
函数中放入什么。我尝试了
echo$\uz
,但只有当命令没有参数时,这才有效。我还尝试了
但这会给我“!!:未找到命令”。在交互式提示(也是bash)下,我得到:

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

您需要设置

set -o history set-o历史 要引用bash手册页面:

当set builtin的-o history选项被启用时,shell提供对命令历史的访问,即以前键入的命令列表。使用HISTSIZE变量的值 作为要保存在历史记录列表中的命令数。将保存最后一个HISTSIZE命令(默认值500)的文本。shell将每个命令存储在参数和之前的历史记录列表中 变量扩展(请参见上面的扩展),但在执行历史扩展后,根据shell变量HISTIGNORE和HISTCONTROL的值进行扩展


一般来说,请阅读bash手册页中的历史记录和历史记录扩展部分。

在陷阱函数中尝试
echo$bash\u命令

manbash

BASH_命令
当前正在执行或即将执行的命令, 除非shell作为陷阱的结果执行命令, 在这种情况下,它是在执行命令时执行的命令 陷阱


默认情况下,历史记录功能仅在交互式Shell中启用。
$ /bin/false foo
$ !!
/bin/false foo
set -o history