如何快速存储和访问常用命令?

如何快速存储和访问常用命令?

我有很多日常需要执行的命令,通常都有细微的变化。

现在我将它们全部存储.bash_history并使用CTRL-R来访问它们,但我想知道是否有更好的方法。我正在寻找什么:

  • 轻松添加新命令
  • 轻松搜索并重新执行想要的命令
  • 避免建议中不需要的命令

不幸的是,bash_history 在第三个需求上并不是那么强大:如果我做一些cdand ls,它很快就会填满历史文件。我最近了解到HIST_SIZE,您可以配置历史记录以避免重复或某些命令,但在配置所有这些之前,我想确保这是最好的方法。

答案1

另一个提示:我有时使用注释来为命令添加书签/标记:

my_command #bookmark

然后:

[ctrl-r]#bookmark

答案2

我发现以下 readline 命令非常有用

history-search-backward,
history-search-forward

reverse-search-history(请注意,它们与通常的, forward-search-history, 绑定到Ctrl- R, Ctrl-不同S)。

我将这些命令与Ctrl-UpCtrl-Down将以下行放入~/.inputrc

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

它们的工作原理:在命令开头写几个字符,按Ctrl- Up,将显示下一个以该前缀开头的旧命令,再次按查看下一个,依此类推。当您满意后,可以修改命令后,按Enter执行。

答案3

使用“别名”

alias是一个很好的工具。

  • 您可以轻松地在命令行上声明要在当前 shell 会话期间使用的一个。
  • 如果您将来要使用它,可以将其添加到您的 shell 配置中。

当您使用别名时,就像您键入它一样,因此非常灵活。例如,您可以将它与管道一起使用:

alias findfoo="grep 'foo'"
echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo # Does your custom grep

您应该能够通过传递您尚未指定的任何标志来进行“轻微变化”。

echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo -v # finds non-matches

答案4

我正在维护一个副本Git 中的 .bash_history。为了简化这个,我设置了

# don't put duplicate lines in the history
# don't save commands which start with a space
HISTCONTROL=ignoredups:erasedups:ignorespace

# append to the history file, don't overwrite it
shopt -s histappend

.bashrc,以及以下命令(针对一般用途进行了修改)清理脚本

# Ensure a single space at the end of each line to easier add more parameters
sed -i -e 's/ *$/ /' "~/.bash_history"

sort --unique --output="~/.bash_history" "~/.bash_history"

我在添加行之前运行它git gui。由于每个命令都会修改历史文件,因此我还有一个特殊的命令来更新该特定存储库:

git stash && git pull && git stash pop

相关内容