[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或什么。
#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 keys
,backspace
和ctrl-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 楼
有用于HSTR
和hh
交互式命令选择的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
评论
你知道ctrl-r吗?是的,我知道,但这不是我想要的。