我刚开始在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 ?
感谢
答案 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