请原谅我的无知……我在 OS X 和 Linux 上的 Bash 中有过命令历史记录。有时,我想根据命令返回到某个项目。例如,假设我之前输入了:
make distclean && make dist && cp *.diff *.tar.gz ../
然后,假设我在历史上有数十或数百条命令跟随它。
我如何才能输入内容make
然后使用向上箭头 (↑
)或 Control 和向上箭头 (CTRL
↑
)返回历史记录中的该命令?
“存根”或“词干”意味着我只输入“ma”,而不输入“make”。
我在 Linux 和 OS X 上使用 Bash,所以我对这两个操作系统都很感兴趣。
答案1
另外Ctrl-R
,您可以使用历史命令并将其通过管道传输grep
到特定命令。
$ history | grep vi
7 vi /etc/shells
8 sudo vi /etc/shells
从那里,您可以看到历史记录编号,并可以使用再次运行该命令!number
。
$ !8
sudo vi /etc/shells
Password:
我相信只要您不填满或清除命令历史记录,该数字应该保持不变。
答案2
这里有一些有用的技巧,可以帮助您根据前面的命令重复该命令(除了使用Ctrl+ R):
用于
!name
重复以名称开头的最后一个命令,例如:!make
要重复命令(例如使用
sudo
),使用:sudo !!
要重复论点,请使用
!$
:ls /usr/local/bin cd !$
要从最后一个参数编辑文件,请使用
!^
:cp /etc/hosts hosts.bak vim !^
更多信息请访问:如何使用 Bash History 提高命令行效率
另请参阅:您最喜欢的命令行功能或技巧是什么?在Unix SE
附注:如果你经常输入错误,可以使用一个应用程序:
答案3
有一个readline
(不是bash
) 功能可以做到这一点。添加:
"\e[A":history-search-backward
"\e[B":history-search-forward
到您的.inputrc
文件。
与此不同,Ctrl-r
它仅匹配前缀。请参阅最重要的命令行提示 - 使用 .inputrc 进行增量历史记录搜索更多细节。