Answers:
当与标志一起使用时,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
作为记录,-w(将历史记录写入文件opion)会将整个历史记录写入指定的文件,因此-a此处(附加)是首选。
还有其他手动方式。特别是ksh没有-a标志作为bash做,但什么ksh 和mksh做的有是HISTFILE环境变量(和bash有,也因为bash包含大量的ksh功能); 顺便说一句,默认情况下未设置此变量(至少mksh在Ubuntu上未设置)。因此,为了将当前会话输出到其他文件,我们调用HISTFILEprepended到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'
您还可以从中看到的是,ksh其相关的shell输出带有特殊字符的历史记录,而不是纯文本bash。因此,您可能需要使用打开该文件ksh。
至于 Ubuntu上的POSIX /bin/shshell(即Debian Almquist Shell或Dash),则fc内置了。但是,在Ubuntu上,破折号是在没有lib-edit的情况下编译的,出于性能原因,这是Ubuntu开发人员的明智选择,因此fc,其他需要进行行编辑的模式 也无法立即使用(除非重新编译dash并安装lib-edit)。
Shell中性的方式将是使用现有工具记录您的会话, 或者编写您自己的函数以按命令记录。