我有很多日常需要执行的命令,通常都有细微的变化。
现在我将它们全部存储.bash_history
并使用CTRL-R来访问它们,但我想知道是否有更好的方法。我正在寻找什么:
- 轻松添加新命令
- 轻松搜索并重新执行想要的命令
- 避免建议中不需要的命令
不幸的是,bash_history 在第三个需求上并不是那么强大:如果我做一些cd
and 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-Up和Ctrl-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