在进行某些安装时,我将“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 中的命令,因为它是最新条目。