在bash中保持持久的历史(2013)

2022-02-14 19:06:14

对于在Linux终端前花费大部分时间的人来说,历史是非常重要的。但是传统的bash历史有很多局限性,尤其是当涉及多个终端时(我有时会打开几十个终端)。还有';It’他不太擅长保存你的历史';我们对跨重启感兴趣。

有很多方法可以改善这种情况;这里我想讨论一个我';在过去的几个月里,我已经非常成功地使用了一个简单的";持久的历史";它可以跨终端实例跟踪历史,并将其保存到我的主目录(~/.persistent_history)中的一个点文件中。来自所有终端实例的所有命令都将永远保存在那里。我发现这在我的工作中非常有用——它几乎每天都为我节省时间。

为什么它会进入一个单独的历史,而不是所有现有历史操纵工具都可以访问的主要历史?因为IMHO后者仍然值得单独保存,只需在一个终端中调出最新的命令,而不会混淆来自其他终端的命令。终端打开时,我要媒体";上升";并获得之前的命令,即使我';在此期间,我在其他终端实例中执行了1000条其他命令。

持久的历史很容易建立。这里';这是我的~/的相关部分。bashrc:

log_bash_persistent_history(){[[$(history 1)=~^\*[0-9]+\+([^\]+\[^\]+)\+(.*)本地日期部分=";${bash_重新匹配[1]}";本地命令_部分="${BASH_重赛[2]}";如果[";$command#u part";!=";$PERSISTENT#u HISTORY#u LAST";]然后回显$date_部分"|" "$指挥部第34部分>>;~/。持久历史导出持久历史最后一次="$指挥部第34部分;fi}#PROMPT#command上要做的事情run#u on_PROMPT_command(){log_bash_persistent_history}PROMPT#u command=";运行_on_prompt_命令";

也在我的生活中。bashrc文件是:请注意,环境变量用于避免无用的重复(即,如果我连续运行ls 20次,它将只记录一次)。

好的,我们有~/。持续的历史,我们如何使用它?首先,我应该说它';它不经常使用,这与我之前提出的将其与更高使用率的常规命令历史分离的观点有某种联系。有时我只是用vi或tail查看文件,但大多数情况下,这个别名对我来说很有用:

管理持久历史的另一个工具是修剪器。我早些时候说过,这个文件保存着历史";永远";,这是一个可怕的词——如果它长得太大怎么办?首先,别担心。在工作中,经过3个月的大量使用,我的历史文件增长到了2MB左右,现在2MB已经很小了。追加到文件末尾非常非常快(我很确定这是一个固定时间操作),因此大小不会';没什么大不了的。但修剪很容易:

修剪到最后20000行。至少在几个月的历史中,这应该足够了,并且您的工作流程不应该真正依赖于以上内容:-)

最后,什么';it’拥有这样一个工具,而不使用它来收集一些无用的统计数据是有好处的。这里';这是15条最常见命令的柱状图I';我在我家的机器上用过#39;过去3个月内,s航站楼:

ls:865vi:863hg:741cd:512ll:289pss:245hst:200python:168make:167git:148time:94python3:88/python:88hpu:82cat:80

一些解释:hst是hg st的别名。hpu是hg pull-u的别名。pss是我最棒的pss工具,这就是为什么你不';我看不到有人打电话给grep和find。因此,Mercurial与git命令的比例在不久的将来可能会发生变化。