注入行来重击历史


9

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


2
通常,人们为常用命令添加别名...
HBruijn 2015年

那很棒。但事实并非如此-我对经常使用的命令使用别名,但是我有很多命令需要根据实际情况修改大量参数。
rgtk

4
您将不得不进行某种文件修改,这听起来很疯狂,可能无法正常工作。只是让你长的命令接受参数的shell脚本,并在拖放/usr/local/bin或东西
韦斯利

如果您经常使用它们,它们是否也不会出现在您的历史中?

声明功能.bashrc
Mark K Cowan

Answers:


13

我将其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


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


漂亮的把戏,偷了那个
2015年

建议您可能需要查看Ctrl-R在历史记录中的搜索功能。准备震撼人心...

2
@CameronKerr请看下面这个答案(serverfault.com/a/695115/120438)。在这种特殊情况下,使用Ctrl + R的缺点是它一次只给您一个相关的命令,而ewwhite的方法返回所有相关命令的列表。
珍妮D

尽管这是一个绝妙的技巧,但它根本无法回答问题。我不明白这是投票率最高的答案。我的用例是,我有一个泊坞窗映像,当我退出它时,它会一直丢失其历史记录。我以为我可以通过命令行将历史文件传递给docker run ...
kumarharsh

@kumar_harsh很难取悦。
ewwhite

7

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

history -r [filename]

从bash手册页:

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

启动自动化

我只是尝试通过将命令添加为我的最后一行来自动启动此命令.bashrc。但是,启动新的Shell时,自定义历史记录文件中的命令不可用。似乎仅从默认.bash_history文件加载了外壳程序历史记录:在处理了启动文件之后以及提示交互式外壳程序之前。不幸的是,似乎没有自动化的简单方法。


2

如@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
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.