例如:

[root@ip-10-0-7-125 ~]# history | grep free
  594  free -m
  634  free -m | xargs | awk '{print "free/total memory"  " / " $ 8}'
  635  free -m
  636  free -m | xargs | awk '{print "free/total memory"  " / " $ 10}'
  736  df -h | xargs |  awk '{print "free/total disk: "  " / " }'
  740  df -h | xargs |  awk '{print "free/total disk: "  " / " }'
  741  free -m | xargs | awk '{print "free/total memory: "  " / "  " MB"}'


我只是想知道是否有什么方法可以执行636命令而无需再次键入它,只需键入一些东西加上数字,例如历史记录636或什么。

评论

你知道ctrl-r吗?

是的,我知道,但这不是我想要的。

#1 楼

在bash中,只需!636就可以了。

评论


在Linux中-这与人正在运行的外壳(bash,zsh等)有关,而与您在其上运行的OS有关。 linux上有一些外壳,不支持历史记录。

– Zoredache
16年4月8日在18:06

@Zoredache同样,在Windows上的bash的大多数实现中,这也可以正常工作。

– Ajedi32
16年4月8日在18:14

当然,不仅是bash,还有其他shell,包括csh。

–提请
16年4月9日在15:19

如果您有一个与要运行的命令非常相似的命令,则可以附加:p以打印该命令而不运行它,例如!636:p。这意味着您可以通过按向上箭头轻松地从历史记录中再次选择它,并进行所需的较小更改

–阿杰弗里斯
16-4-14在7:27



#2 楼

是的,这叫做“历史扩展”。有关完整的详细信息,请参见

LESS='+/^HISTORY EXPANSION' man bash


使用感叹号后跟数字可能是最简单的用法: />
!636


但是,您也可以不知道其历史编号就直接运行最后执行的命令:命令返回:

!!


但是,我最经常使用的形式是重复上一个命令的最后一个参数: br />
或者,例如,我正在检查文件。使用制表符补全,我可以执行以下操作:

!-2


再次阅读手册页以获取更多详细信息:

echo this text goes into a file > /tmp/afile.txt
cat !$


评论


互动式,Alt-。比!$更方便。它逐行将最后一个命令的最后一个参数插入行中。

– ulidtko
16-4-8在12:08



@ulidtko在哪里记录了那些特殊的转义符(我知道!$,但从未听说过Alt-。)?请问您可以发布链接吗?

–edmz
16-4-8在13:26



LESS =“ + / DEFAULT KEY BINDINGS” man 3 readline,/ etc / inputrc,〜/ .inputrc。除了bash之外,许多程序都使用libreadline。对于那些这样做的人,您可以免费获得相同的功能,例如Alt-。,Ctrl-X-U(撤消),Ctrl-/(描述快捷方式),制表符完成等。例如,仅用三行PYTHONSTARTUP就可以在普通python REPL中启用制表符补全和历史记录。它将(在大多数情况下)与bash中的工作相同,因为它是由GNU Readline库完成的。阅读专线的手册页详细介绍了这些功能。

– ulidtko
16-4-8在14:44



同样,Ctl-UpArrow(或bash上的AltUpArrow)将在历史记录列表中向后滚动。输入几个字符后,UpArrow仅获得以该字母开头的命令,例如“ fr(Ctl-Up)”滚动显示OP列表中的所有“ free ...”命令。这也适用于使用readline的gnuplot和gdb之类的东西。

–jamesqf
16年4月8日在17:06

@ Ajedi32,请参阅我的答案中的最后粗体行。 :)坦率地说,这个答案几乎不了解历史扩展可以做什么。请记住,这是在Shell级别上,而不是您正在调用的命令。因此,回显{1..5}后跟触摸!$将触摸五个文件,而不仅仅是一个文件。因此严格来说,它不是该行的最后一个参数,而是最后一个外壳程序单词。 (也可以尝试echo hello> temp,然后再执行echo再见!$。)如果您能想到一种更清晰地表达它的方法,请随时提出建议。

–通配符
16年4月8日在18:36

#3 楼

一个不错的选择,如果您不想第一次使用历史记录,请记下数字,等等:

用bash(也许还有其他): br />(ctrl-r =“交互式反向搜索”)(something =先前命令的一部分)

这将向您显示包含something的最新历史记录行。要获得以前的版本,请在每次获得前一行时再次执行ctrl-r(单独)。

例如:显示包含“ 10”的最新历史记录行(例如,以为例,并再次显示ctrl-r),直到检索到要查找的历史记录行为止。
,只需Enter即可运行它(或者您也可以编辑它,使用arrow keysbackspacectrl-a转到行的开头,ctrl-e到达末尾,ctrl-k:“杀死”从光标到行尾(=删除+将其保存在缓冲区中),ctrl-y:从缓冲区中恢复以前杀死的位等)。需要禁用XON:请参见https://stackoverflow.com/a/791800/1841533:

”,仅通过运行

来禁用XON / XOFF。

(然后您将能够使用ctrl -s,而无需冻结终端)

评论


如果我这样做并且不小心按了ctrl-r一次,是否有某种方法可以再次搜索历史记录?

–卡巴斯德
16年4月9日在20:33

@kasperd:是的,可以。关于se的许多答案指出:ctrl -s用于正向搜索。

–奥利维尔·杜拉克(Olivier Dulac)
16-4-9在20:36



不幸的是,ctrl -s用于冻结终端,bash不会禁用该终端,因此在默认配置下不起作用。 (其他程序,例如emacs,禁用按键绑定以冻结终端,以便可以使用ctrl-s进行搜索。)

–卡巴斯德
16年4月9日在20:43

@kasperd:是的,很抱歉没有更早提及(我指出“很多答案”,因为它们确实做到了这一点,但是我没有花时间在评论中键入此内容或提供链接...(我正在使用我的我现在回到家,可以在上面的答案中进行编辑。ctrl -s用于bash历史记录搜索需要您先stty -ixon

–奥利维尔·杜拉克(Olivier Dulac)
16 Apr 10'在0:17

该命令将中断ctrl -s的正常使用,因此这不是一个选择。

–卡巴斯德
16-4-10的1:45

#4 楼

您可以使用内置的shell fc:

fc -s 636


评论


这实际上比接受的答案要好,但是您必须删除-s才能获得好处。如果运行fc 636,将使用缓冲区中历史记录中的命令636打开编辑器,并且在保存和退出命令(已修改或未修改)时将运行该编辑器。甚至更好的是,这是POSIX兼容的。

–通配符
17-10-24在1:56

@StevenPenny谢谢。是的,我确实知道POSIX是什么,尽管我看不到相关性。无论如何,一些易于访问和包含的文档将是不错的。

– Faheem Mitha
17年11月11日17:17



@FaheemMitha尝试运行“帮助fc”。

–通配符
17年11月11日在18:40

@Wildcard帮助不是POSIX-可能必须做破折号或类似的操作

–史蒂芬·潘妮(Steven Penny)
17年11月11日在18:59

@Wildcard谢谢。我倾向于忘记帮助的存在。另一个内置的shell。对于那些可能想要获得新系统帮助的粗心用户,却感到困惑,而他们却面临着大量的垃圾。 :-(

– Faheem Mitha
17年11月11日19:55



#5 楼

有用于HSTRhh交互式命令选择的bash-zsh命令,优于Ctrl-R反向搜索:



它是交互式的,因此您可以搜索和编辑在执行该命令之前。

在Ubuntu上,您可以使用以下单行代码安装hh

sudo add-apt-repository ppa:ultradvorka/ppa && sudo apt-get update && sudo apt-get install hh && hh --show-configuration >> ~/.bashrc


或逐步:

sudo add-apt-repository ppa:ultradvorka/ppa
sudo apt-get update
sudo apt-get install hh


在Fedora,RHEL或CentOS上安装hh

sudo dnf|yum install hstr -y


在具有homebrew的macOS上: br />
brew install hh


...然后使用以下命令对其进行配置: 。

运行hh --show-configuration以确定将添加到您的Bash配置文件中的内容。

项目主页Github上的更多配置选项:
https://github.com com / dvorka / hstr