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


37

我有很多日常需要执行的命令,通常只有很小的变化。

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

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

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


7
对于日常命令,alias也许更有用。例如。alias gfc="git fetch origin"
5

Answers:


20

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

history-search-backward,
history-search-forward

(注意它们是从通常的不同reverse-search-historyforward-search-history,绑Ctrl- ,R- )。CtrlS

我将这些命令与Ctrl- UpCtrl- Down将以下几行关联~/.inputrc

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

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


1
为此,我为此+1,尽管我只是将它们绑定到对我有用的向上箭头键和向下箭头键(没有CTRL修饰符)。如果你想也这样做你需要的线条"\e[B": history-search-forward"\e[A": history-search-backward
西蒙·惠特克

还要考虑增长HISTFILESIZE和/或HISTSIZE(仅zsh支持HISTSIZE,bash同时支持),以确保缓冲区足够大。SO问题bash HISTSIZE与HISTFILESIZE?可以进一步照亮。
亚当·卡兹

56

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

my_command #bookmark

然后:

[ctrl-r]#bookmark

爱它!
格雷格

17
ash!天才。:-)
Simon Whitaker

非常好!我也将其用于mysql-cli :)
Konerak 2011年

太好了!不幸的是,zshell并未将#视为交互式会话中注释的开始。知道类似的把戏吗?
内森·朗

1
@NathanLong: $_bookmark。可以说这是一个可怕的骇客,它利用了一个事实,即不存在的变量会扩展为零,但是它确实有效,但要注意,不允许使用空格(请使用_代替)。
坎普

7

尽管范围非常有限,但我想指出以下两个扩展占位符:

!! 

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

!$ 

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


是的,很棒的提示...如果我只记得要使用它们的话:)
Jeach 2011年

6

使用“别名”

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

5

我为常用命令创建了最少的Shell脚本,并给它们起了短的名字。它们都存储在添加到中的相同位置PATH

这样,我可以快捷地访问非常复杂的命令,并且与之不同的是,alias我可以将任务的可更改部分转换为快捷方式的命令行参数。


3
如果只想传递参数,则考虑改为定义函数。如果您需要完整的脚本,这是一个不错的解决方案:)
Konerak 2011年

@Konerak我必须尝试一下。我敢打赌,我通常只是编写一个脚本,但是定义函数会更简洁。
ixtmixilix

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

+1主要是为了提及HISTCONTROL=ignorespace,这有时对避免混乱历史很重要。
quodlibetor 2012年

2

在这里所有其他涉及历史的答案中。

我设置

HISTFILESIZE=2024
HISTSIZE=1024

在〜/ .bash_profile中

除了其他评论以外:历史

另一个有用的功能...

开始历史回顾

!first few letters<ESC>Ctrl-E

会记得以前几个字母开头的最后一条命令

例如:

!find<ESC>Ctrl-E

您没有提到您是使用GUI还是仅使用命令行。如果使用的是GUI,则可以使用持久性剪贴板管理器之一来复制/粘贴常用命令,用户ID,密码,URL等。


哇,!find<ESC>CTRL-E行得通,但我怀疑我明天能否记得它。那是什么ESC CTRL-E?
Konerak 2011年

只是对扩展密钥的绑定
bsd

0

学习使用Ctrl-RCtrl-S可以轻松地在历史记录中搜索所需的命令,并且您已经发现HISTCONTROL环境变量可以忽略重复项并更改bash历史记录文件的站点。

如果我由于打了太多次而跳过了找到的命令,通常会执行很多操作,Ctrl-R然后Ctrl-E更改一些参数以进行救援。Ctrl-RCtrl-S


2
通常,以Ctrl-S为“停止”序列的方式来设置tty,而不是(直接)将其用于正向搜索。
enzotib 2011年

在这种情况下,可以将前向搜索重新映射到<kbd> Ctrl-S </ kbd>以外的其他内容。
Evgeny


0

除了上面的好答案之外,如果您碰巧使用的是基于kde或gnome的gui,那么AutoKey可能会非常有用。

https://code.google.com/p/autokey/

它允许您创建通过键入几个字符或按热键触发的短语。这些短语随后被替换或添加到您的输入中。

它还支持用python编写的脚本,如果您了解python,则可以执行几乎所有操作。我还不了解python,但是我已经有了一些非常基本的脚本来完成整洁的事情。

一切似乎都来自您的键盘,因此它可以与任何接受键盘输入的应用程序一起使用,也可以与您自己的桌面一起使用。

它具有许多选项来控制这些事物的激活方式和激活位置,因此您可以使某些仅在控制台中工作,而另一些仅在另一个窗口中工作。您还可以设置短语,使其在键入触发它们的字符串后立即运行,或者等到您给它们确定后再运行。


0

就像其他人所说的,别名是您的朋友。对于一些更复杂的事情(当您在指令之间的某个地方需要参数时),我在.zshrc中使用函数,例如:

function ff() { find . -iname "*$**" }

类似于locate(由于某种原因db不可用时使用它)。要么

function chuck() { ps aux | grep $1 | tr -s '\t' ' ' | cut -f2 -d' ' | xargs kill $2 }

代替杀戮者。


0

除了使用Cntl-R来回顾之外.bash_history,我在~/develop目录中还有一个README文件,在其中放置了诸如git/的长命令svn,因此以后可以在需要时返回到它们。同样,我计划有一个~/install/README文件来放置在安装新版本的Linux / Ubuntu之后通常安装的所有常用软件包名称。因此,我们的想法是在每个目录(例如,视频,音频等)中都有一个README文件,并在其中放入一些常用的命令/提示,您以后可能需要知道这些命令/提示。

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.