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上未设置)。因此,为了将当前会话输出到其他文件,我们调用HISTFILE
prepended到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/sh
shell(即Debian Almquist Shell或Dash),则fc
内置了。但是,在Ubuntu上,破折号是在没有lib-edit的情况下编译的,出于性能原因,这是Ubuntu开发人员的明智选择,因此fc
,其他需要进行行编辑的模式 也无法立即使用(除非重新编译dash
并安装lib-edit
)。
Shell中性的方式将是使用现有工具记录您的会话, 或者编写您自己的函数以按命令记录。