在多个终端窗口中保留tcsh历史记录


Answers:


7

这些变量将历史记录设置为自身合并而不是覆盖,并且不保存重复项:

set history=1000
set histdup=erase
set savehist=(1000 merge)

秘诀是这条线:

alias precmd 'history -S; history -M'

这将在打印提示之前(即在您键入的每个命令之后)保存并合并您的历史记录。

以上所有内容都应添加到您的.tcshrc文件中。


当我添加此alias precmd 'history -S; history -M'命令时,什么也没发生。还有什么应该做的吗?
艾曼萨拉

@AymanSalah发生的情况并不明显-这是.history文件(或histfileshell变量值,如果设置)被写入磁盘。 没有设置precmd别名,ls -l .history.history文件显示为未修改状态。 随着 precmd如上设置,ls -l .history将显示更新的时间戳和大小,因为它得到每个命令写入。
兰德尔

@Randall感谢您指出这一点。然后我在shell会话中遇到了问题。您的意思是100%正确。
艾曼萨拉

1

除了Idan答案,我想补充一点alias precmd 'history -S; history -M',因为它还记录了SIGINT和EOF信号(Ctrl + C和Ctrl + D),因此可能会破坏历史文件。

在此处输入图片说明

更好的方法是在运行命令后保存并合并当前的Shell历史记录。

由于tcsh无法将SIGINT或EOF识别为有效命令,因此您可以通过下面的此设置来实现。

alias postcmd       "history -S; history -M"
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.