1

我在工作中使用 tcsh - 我广泛使用的功能之一是在 shell 提示符下完成命令行历史记录。目前,我已将历史文件的大小限制为 2000(因为我不想让 shell 太慢)。但是有时我需要一个命令,我知道我已经使用了一两个月,但现在已经被删除了。所以我想要一个系统,其中:

  1. 我的历史缓冲区仅存储 2000 行

  2. 旧命令不应被删除,而是应保存到“主”历史文件中,按时间顺序排列,即如果打开了两个外壳,则应根据日期戳(而不是外壳的顺序)对历史中输入的命令进行排序被关闭)!

  3. 如果这个主历史文件可以自动备份,比如每周备份,那将是完美的。

我敢肯定,许多狂热的 shell 用户都面临过这样的情况——我希望从其中一位用户那里得到答案!

4

2 回答 2

1

从来没有想过这样做,但最简单的方法是编写一个将历史文件附加到另一个文件的 cron 作业。这样做的问题是,除非您在完成转储后编写 cron 以清除历史文件,否则您会得到重复。

历史仅按行号存储(据我所知),因此每个转储的数字都会重复。但是您冷添加了带有转储日期的标记线。

于 2009-12-23T12:37:11.657 回答
1

2000太低了。您可以筹集到相当数量的资金而不会遭受太多痛苦。

接下来,您可能希望在注销时存储历史记录,因为这是将新命令添加到 .history 文件的时间。

在 $HOME 中创建一个名为 .logout 的文件(对于 bash 用户,此文件是 .bash_logout)。在此,将历史记录的内容复制到永久存储。例如:

cat $HOME/.history >> $HOME/.ancient_history

这会将历史记录附加到文件“.ancient_history”中。对于 bash 用户,要复制的文件称为 .bash_history。

然后创建一个 cron 作业,不时创建备份。对于初学者来说,这是一种将文件移动到每天午夜后 5 分钟带有日期戳的文件名的方法。

 5 0 * * *       mv $HOME/.ancient_history $HOME/.ancient_history_`date +%s`

您可能可以用它做更多的事情,但这足以开始。这是一个很好的主意,我以前也没有想过这样做:-)

于 2009-12-23T13:00:40.103 回答