我对 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 会话中出现和运行。
更多的:
您启动脚本的事实将被记录在历史记录中。我不确定脚本运行时历史记录中是否少于一行。