如何测试 bash 中的终端命令历史记录中是否有条目?

如何测试 bash 中的终端命令历史记录中是否有条目?

我对 Bash 脚本还很陌生,我需要一个非常简单的脚本,如果有命令历史记录,则显示它,如果没有,则通知用户没有命令历史记录。

到目前为止我所拥有的是:

#!/bin/bash

if [ -n "$(history)" ]
    then
        history
    else
        echo "No entered commands."
fi

但是,无论历史记录是否已用 清除history -c,上述脚本都会返回:

/path/to/script.sh: 3: history: not found
No entered commands.

到底出了什么问题?我该如何调整或重写这个脚本以使其正常工作?

答案1

if [ "$(history | wc -l)" -gt 0 ] ...,请参见man bash下文CONDITIONAL EXPRESSIONS[与之相同test,因此man test将对此进行更多说明。

未核实事实:(从记忆中!)
现在,请注意,启动 bash 脚本通过启动新的“bash”(可执行文件)来实现其魔力;这导致该 bash 会话中的历史记录(脚本运行时)将与您在启动脚本的会话中的内容不同。

为了能够检查当前会话中的历史记录,您必须采取不同的方法:
一种方法是让您的“脚本”成为 bash 函数,例如在 $HOME/.bashrc 中,然后使用该函数。
或者,将该函数放在单独的文件中,并source scriptfile.sh使其在当前 bash 会话中出现和运行。

更多的:
您启动脚本的事实将被记录在历史记录中。我不确定脚本运行时历史记录中是否少于一行。

相关内容