有没有办法只检查当前会话的历史记录?

And*_*rew 10 command-line history

我想知道是否有任何命令或任何其他方式可以仅在当前会话中检查我的命令历史记录。

Ser*_*nyy 12

history在建bash允许当用于指定文件名-anrw的标志,并-a从标志说明help history状态:

将此会话的历史行附加到历史文件中

因此,我们可以这样做:

~$ history -a this_session.history
~$ cat ./this_session.history 
history mysession.history 
cat mysession.history 
clear
history -a this_session.history
Run Code Online (Sandbox Code Playgroud)

对于记录,-w(write history to file 选项) 将整个历史写入指定的文件,因此-a(append) 这里是首选。


还有其他手动方式。特别是ksh没有-a标志作为bash做,但什么kshmksh做的有是HISTFILE环境变量(和bash有,也因为bash包含大量的ksh功能); 顺便说一下,这个变量默认没有设置(至少mksh在 Ubuntu 上没有设置)。因此,为了将当前会话输出到其他文件,我们调用HISTFILEprepended to command 这在 shell 语法中意味着使用您指定的附加环境变量运行命令。像这样:

bash-4.4$ HISTFILE='mykshfile.hist' ksh
$ echo 'Hello'
Hello
$ echo 'World'
World
$ 
bash-4.4$ cat ./mykshfile.hist 
?echo 'Hello'
echo 'World'
Run Code Online (Sandbox Code Playgroud)

您还可以从中看到ksh,它及其相关的 shell 输出带有特殊字符的历史记录,而不是像这样输出纯文本bash。因此,您可能希望使用ksh.

至于 Ubuntu 上POSIX /bin/shshell,即 Debian Almquist Shell 或 Dash,存在fc内置的. 然而,在Ubuntu破折号编译没有LIB-编辑,这是由Ubuntu的开发性能方面的原因有意识的选择,所以fc需要行编辑其他模式 不箱子的工作了(除非重新编译dash自己和安装lib-edit)。


Shell中立的方法是使用现有工具记录您的会话编写您自己的函数以基于每个命令进行记录。