1

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

4

3 回答 3

1

shell 历史工具仅在交互式 shell中可用,因此您不能 (*) 将!ls其放入脚本中。

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

于 2012-04-13T18:05:00.160 回答
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 给出一个错误,这意味着它不再可用。所以只需执行历史记录和第一列给你的数字。您只能使用执行这些命令!NUMBER

喜欢:

$ !50
于 2012-04-13T17:38:05.933 回答
0

要获得历史上的第一个项目,以下方法不起作用?

echo !1

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

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

于 2012-04-13T17:25:15.643 回答