如何永久地将某些命令添加到.bash_history?

时间:2011-10-03 09:09:56

标签: bash history

我使用bash,有时我必须为某些任务键入一些非常长的命令。这些长命令不经常使用,并且在我再次使用它们时通常会在.bash_history文件中被覆盖。如何永久地将某些命令添加到.bash_history?

感谢。

4 个答案:

答案 0 :(得分:4)

正如其他人所提到的,通常的做法是将长命令存储为别名或bash函数。组织它们的一种好方法是将它们全部放在一个文件中(比如$HOME/.custom_funcs),然后从.bashrc中获取它。

如果确实希望能够将命令加载到bash历史记录中,则可以使用-r命令的history选项。

来自man page

-r    Read the current history file and append its contents to the history list. 

只需将所有条目存储在一个文件中,只要您需要加载自定义历史记录,只需运行history -r <your_file>即可。

这是一个演示:

[me@home]$ history | tail  # see current history
 1006  history | tail
 1007  rm x
 1008  vi .custom_history
 1009  ls
 1010  history | tail
 1011  cd /var/log
 1012  tail -f messages
 1013  cd
 1014  ls -al
 1015  history | tail  # see current history

[me@home]$ cat $HOME/.custom_history  # content of custom history file
echo "hello world"
ls -al /home/stack/overflow
(cd /var/log/messages; wc -l *; cd -)

[me@home]$ history -r $HOME/.custom_history   # load custom history

[me@home]$ history | tail  # see updated history
 1012  tail -f messages
 1013  cd
 1014  ls -al
 1015  history | tail  # see current history
 1016  cat .custom_history
 1017  history -r $HOME/.custom_history
 1018  echo "hello world"
 1019  ls -al /home/stack/overflow
 1020  (cd /var/log/messages; wc -l *; cd -)
 1021  history | tail  # see updated history

请注意条目1018-1020实际上是如何运行的,而是从文件中加载的。

此时您可以像通常使用history!命令或 Ctrl + r 快捷方式一样访问它们喜欢。

答案 1 :(得分:1)

如何使用shell变量扩展bash历史文件的大小

<强> HISTFILESIZE

而不是默认的500使它像2000

答案 2 :(得分:0)

规范的答案是创建包含这些命令的脚本。

修改假设您有以下历史记录条目;

find /var/www -name '*.html' -exec fgrep '<title>' {} /dev/null \;
find ~/public_html -name '*.php' -exec fgrep include {} /dev/null \;

...您可以尝试将参数隔离成类似这样的函数;

r () {
  find "$1" -name "*.$2" -exec fgrep "$3" {} /dev/null \;
}

...你可以这样使用,重复上面的历史条目:

r /var/www      html '<title>'
r ~/public_html php  include

显然,使用默认值,参数验证等创建正确的脚本的步骤不是很长。(提示:您可以默认使用路径的当前目录,并且没有文件名的扩展名,并添加像--path--ext这样的选项可以在需要时覆盖默认值;然后脚本只有一个必需参数。)

通常,您会将脚本存储在$HOME/bin中,并确保此目录已从PATH或类似内容添加到.profile。对于函数,这些函数通常在.profile中定义,或者是从此文件中source d的单独文件。

将它放在一个中心位置也有助于进一步发展它;例如,对于精度和可能稍微增加的效率,您可能希望将-type f添加到find命令;现在只有一个地方需要记住编辑,你将把它修好。

答案 3 :(得分:-1)

您可以为命令创建alias

  

alias myalas ='...这里有一个很长的命令......'