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

Kon*_*rak 40 shell command-history

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

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

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

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

小智 65

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

my_command #bookmark
Run Code Online (Sandbox Code Playgroud)

然后:

[ctrl-r]#bookmark
Run Code Online (Sandbox Code Playgroud)

  • 标签!天才。:-) (20认同)
  • @NathanLong:`$_bookmark`。可以说这是一个可怕的黑客利用不存在的变量扩展为空的事实,但它确实有效,但需要注意的是不允许使用空格(使用 _ 代替)。 (2认同)

enz*_*tib 22

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

history-search-backward,
history-search-forward
Run Code Online (Sandbox Code Playgroud)

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

我将这些命令关联到Ctrl-Up并且Ctrl-Down将以下行放入~/.inputrc

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward
Run Code Online (Sandbox Code Playgroud)

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


Nat*_*ong 7

使用“别名”

alias 是一个很好的工具。

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

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

alias findfoo="grep 'foo'"
echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo # Does your custom grep
Run Code Online (Sandbox Code Playgroud)

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

echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo -v # finds non-matches
Run Code Online (Sandbox Code Playgroud)


chi*_*org 7

虽然范围非常有限,但我想指出这两个扩展占位符:

!! 
Run Code Online (Sandbox Code Playgroud)

是最后一个命令的占位符扩展。如果您忘记sudo在命令之前放置,则很有用。

!$ 
Run Code Online (Sandbox Code Playgroud)

重复最后一个参数。如果您想重复不同的命令,则很有用a/very/long/path/name/you/do/not/want/to/type/again


l0b*_*0b0 5

在 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
Run Code Online (Sandbox Code Playgroud)

.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"
Run Code Online (Sandbox Code Playgroud)

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

git stash && git pull && git stash pop
Run Code Online (Sandbox Code Playgroud)


小智 5

我为我常用的命令创建了最少的 shell 脚本,并给它们起了简短的名字。它们都存储在同一个地方,并添加到PATH.

这样我就可以通过快捷方式访问非常复杂的命令,与alias我不同的是,我可以将任务的可变部分转换为快捷方式的命令行参数。

  • 如果您只想传递参数,请考虑定义函数。如果您需要完整的脚本,这是一个很好的解决方案:) (3认同)