乱七八糟的历史


15

在gui模式下,当用户打开多个终端时,终端如何重写该用户的历史文件?我问的原因是,在每个终端中,用户最终有可能执行不同的命令。那么,历史文件最终会保存来自所有终端的命令还是仅保存要打开的第一个终端的命令?还是有其他某种方案可以用来解决这种情况?

Answers:


11

这完全取决于外壳如何选择处理它

bash默认情况下,退出时每个外壳程序的本地历史记录将覆盖历史记录文件,因此最后一个退出外壳程序将获胜。该histappend选项将使它附加到主历史记录中(shopt -s histappend)。

zsh 默认情况下执行相同的操作,并且有一些处理方法:

  • appendhistory -每个Shell的历史记录都会在退出时附加到主历史记录文件中
  • incappendhistory -每次在任何shell中执行一行时都会更新主历史文件,而不必等到该shell退出
  • sharehistory-与一样incappendhistory,还可以将主历史文件中的更改拉入所有正在运行的shell中,因此您可以在一个shell中运行命令,然后Up在另一个shell中运行以查看它

现在,请告诉我如何在Bash中执行该操作;)
tante

1
@tante不起作用shopt -s histappend
Michael Mrozek

0

我最初是从O'Reilly的“ Unix Power Tools”书中得到这个想法的。

在我的.profile设定中:

export HISTFILE=$HOME/.sh_hist.$$

每次.profile读取时,我都会得到一个新的历史记录文件,该文件名为会话的PID。如果我有多个登录名,则每个登录名都会获得一个唯一的历史记录文件。在ksh和中工作bash

如果您只是在X会话中打开新终端,则这些终端通常不是登录Shell,但是您可以将它们配置为充当登录Shell。例如,rxvt +lsrxvt作为登录外壳启动。检查文档以了解您所使用的终端。

另外,除非您使用.logout.bash_logout文件(或其他某种方式)进行清理,否则最终将产生大量.sh_hist文件。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.