将行注入 bash 历史记录

将行注入 bash 历史记录

默认情况下,bash 加载~/.bash_history历史记录中的行。是否可以添加要加载的自定义文件?我想注入包含我经常使用的命令的文件,并通过内置搜索访问它们。

答案1

我将其简单地alias h='history|grep'加载到我的 Bash 配置文件中。

所以我的工作流程是h command,例如:h hpssa

#  h hpssa
  202  05-28-2015 11:54:33  hpssacli
  217  05-28-2015 11:54:33  hpssa -start
  225  05-28-2015 11:54:33  hpssacli -stop
  226  05-28-2015 11:54:33  hpssa -stop
  228  05-28-2015 11:54:33  hpssa -start

如果我想运行“ hpssa -stop”,我只需输入!226


这只是我的方法,但也许您可以修改回忆历史项目的方式。我认为将数据实际注入历史文件是没有意义的。

答案2

我曾经非常依赖Ctrl-Rreverse-search-historyReadline 命令),它通过历史记录向后搜索以检索以前输入的长命令,但我现在更喜欢使用别名和 shell 脚本/函数。无论如何,Bashhistory内置命令可用于将自定义命令列表加载到当前历史记录中。

history -r [filename]

从 bash 手册页:

读取历史文件的内容并将其追加到当前历史列表中。

启动自动化

我只是尝试通过将其添加为我的.bashrc.但是,当我启动新 shell 时,自定义历史记录文件中的命令不可用。看来 shell 历史记录仅从默认.bash_history文件加载:启动文件已经处理完毕,只是提示符出现在交互式 shell 中。不幸的是,似乎没有简单的方法可以自动完成此操作。

答案3

正如@AnthonyGeoghegan 观察到的,历史记录是在处理启动文件后加载的。这提供了一种在启动文件中预加载所需历史记录的不同方法:

mv .bash_history .bash_history.tmp
cat .extra_hist .bash_history.tmp > .bash_history
# or swap them, to put the extra stuff at the end of the history, for
# quicker ^R access.

请注意,随着时间的推移,这种方法可能会导致将特殊命令的多个副本添加到 .bash_history 中。您可以用注释行包装您的特殊命令,这样您就可以在填充 .bash_history 文件时轻松找到并删除它们(例如通过 sed)。就像是:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history

相关内容