除了“.bash_history”之外,还有什么“history”命令用于显示 bash 历史文件的内容?

除了“.bash_history”之外,还有什么“history”命令用于显示 bash 历史文件的内容?

在进行某些安装时,我将“HISTFILE”变量更改为不同的文件以记录所使用的命令。现在我想使用该history命令来显示它们,就像使用history默认使用.bash_history文件的命令一样。

应将什么选项传递给history命令?当我尝试时history ~/.history.d/alternate_history收到错误消息

-bash: history: /home/vfclists/.history.d/alternate_history: numeric argument required.

帮助man列出了一些选项,这些选项似乎对我不想要的其他历史文件进行了一些更改。

答案1

history命令从不对文件进行操作,仅对其内存中的历史列表进行操作。您只能从文件中读取 ( r)、写入 ( -w) 和附加 ( -a) 列表,然后访问或操作内存中的列表。从文件中读取将替换或扩展当前 shell 会话中的历史记录。

但是,您可以生成另一个 shell 并操纵其历史记录来运行您想要的任何命令,而不会影响当前 shell 的历史记录:

bash -c 'history -cr file ; history'

或者

( history -cr file ; history )

history在任何一种情况下,您都可以将所需的任何历史记录选项添加到第二个命令中。如果您经常这样做,您可能需要定义一个接受文件作为参数并运行子 shell 版本的函数:

histfile() {
    ( history -cr "$1" ; history )
}

如果您有兴趣显示保存的时间戳,您还需要设置HISTTIMEFORMAT。如果您使用的是子 shell,并且您在主机 shell 中获取时间戳,则该时间戳应该自动存在,但对于bash -c版本或脚本,您需要设置它:

bash -c 'history -cr file ; HISTTIMEFORMAT="%Y%m%d%H%I%S " history'

您还可以使用export父 shell 中的变量。

答案2

当前 shell 的当前信息history存储在内存中,只有在退出 shell 后才会写入 HISTFILE。

您可以在使用 退出 shell 之前导致这种情况发生history -a。还有一些参数可以将文件内容读入当前历史记录等。本质上它是一个 RTFM :-)

因此,您可以使用 写出当前历史记录history -a temp_history_file,然后使用 读入新历史记录history -r new_history_file。然后,您的命令历史记录将包含 new_history_file 中的命令,因为它是最新条目。

相关内容