脚本Bash和历史Unix

时间:2012-04-13 17:16:11

标签: bash unix

我刚开始在UNIX上使用Script bash而我没有找到在历史记录中编写第一个命令的解决方案,例如,使用ls。如果我写在shell中

history  
!ls

它有效,但是当我要创建一个脚本时,它将无法工作。

这是我的示例代码

#!/bin/bash
set -o | grep history
set -o history
#echo "HISTFILE is $HISTFILE"
#history "!ls"; 
#history
#!ls
history #it works

另一个问题:为什么echo "HISTFILE is $HISTFILE"只打印 HISTFILE ? 感谢

3 个答案:

答案 0 :(得分:1)

shell历史记录工具仅在interactive shell中提供,因此您无法(*)将!ls放入脚本中。

(*)除非您使用shell的-i选项启动脚本。但是,如果您要使用文本编辑器编写脚本,请剪切并粘贴或创建函数(如果要重用命令)。

答案 1 :(得分:0)

要获取历史记录中的第一项,以下内容不起作用?

echo !1

至于你的第二个命令,它应该工作......可能没有正确定义HISTFILE变量。

尝试在脚本的第一行使用“bash -li”而不仅仅是“bash”,以获得更多变量初始化。

答案 2 :(得分:0)

您尚未将任何内容存储到HISTFILE。所以它是空的。试试这个:

#!/bin/bash
set -o history
ls -l 
echo "hi"
echo "hello"
HISTFILE=`history`
echo -ne "HISTFILE is: $HISTFILE"

这一行:

 HISTFILE=`history`

将运行该命令并将输出存储在HISTFILE中。

shell的历史文件存储在主目录中,其路径在脚本中不可见。所以要检索:cat ~/.bash_history

history命令仅存储最后1000条命令。所以!1给出错误然后意味着它不再可用。所以只需执行历史记录和第1列,它会为您提供数字。您只能使用!NUMBER

执行这些命令

像:

$ !50