79

只是一个提高我bash技能的问题。我总是这样做:

$ history | grep some_long_command

...
...
123 some_long_command1.........
124 some_long_command2.........
...

然后我可以通过执行以下操作运行我找到的命令:

!123

但是,我经常想这样做:

some_long_command1foobar

即在我运行它之前更改命令。你可以使用 bash 来运行这个命令吗:

#some_long_command1

所以它得到评论。

然后我不必使用鼠标突出显示命令,编辑它然后运行它(我可以只使用键盘 - 更快)。

我想我可以编写一个脚本来做到这一点,但可能已经在某处内置了功能......?

4

10 回答 10

143

我建议您不要使用历史命令,而是使用ctrl+r并开始输入该命令。当您按箭头键好像要修改它时,它将退出自动完成识别,并让您在运行前进行编辑。

更新:另外,如果您想循环浏览包含您刚刚键入的字符串的不同命令,请继续按ctrl+r

于 2012-06-12T16:03:51.063 回答
62

实际上,您可以只附加:p到命令以打印它而不实际运行它。例如:

$ ls -la
$ !!:p

将打印ls -la为上一个命令而不运行它,您只需按↑</kbd> (up) to find it and edit it.

你也可以做

!123:p

将第 123 个命令打印为上一个命令。

于 2012-06-20T17:12:12.857 回答
20
于 2012-06-12T16:32:54.207 回答
11
!123:gs/old/new/

将运行命令 123 将字符串 'old' 替换为字符串 'new'。

于 2012-06-12T16:07:21.777 回答
6

您可以通过按 M-^(Mac 上的 option-shift-6)进入编辑模式。

输入这个:

!123M-^

您将编辑命令#123。这有点像使用 ctrl-r,但以感叹号语法开头。

于 2013-02-11T22:44:19.130 回答
4

不要使用history命令,而是将history-search-backward/绑定history-search-forward到可以轻松记住的快捷键(我更喜欢 PgUp/PgDown)。为此,请将其放入您的.inputrc文件中:

"<key code>":  history-search-backward
"<key code>":  history-search-forward

要获取<key code>,请输入Ctrl-V <key>shell,然后将输出中的开头替换^[\e

设置完成后,您只需键入some并按 PgUp 即可获取some_long_command. 如果您需要some_long_command with_some_arg,但历史稍后有类似的命令,您可以通过键入然后反复按 PgUpsome_long_command with_some_other_arg循环直到到达它,或者您可以键入,按 PgUp,将光标移动到两个命令开始不同的位置,输入几个字符并再次点击 PgUp。在我看来,这种快速翻页/区分相似命令的能力使其成为比.somesomeCtrl-R

于 2013-02-20T15:17:36.567 回答
3

你也可以把

shopt -s histverify

在你的.bash_profile,这会导致任何历史扩展出现在你的命令行上而不运行它,允许你在这样做之前进行编辑。

于 2012-06-12T16:15:52.947 回答
1

您可能想尝试类似“建议框”的历史记录https://github.com/dvorka/hstr - 它读取 Bash 历史记录并允许快速导航。

呵呵

要获取最后一个命令,只需键入 hh,导航到该命令并使用向右箭头在命令行上获取它(您可以在其中编辑它和/或添加注释)。

于 2014-01-10T00:18:31.703 回答
0

^p 获取 unix/solaris 中最后输入的命令

于 2014-02-11T14:15:42.027 回答
0

别名 r='fc -s'

在您的.bashrc(主目录)中,您只需输入

r <whatever>

在命令提示符下,您将执行<whatever>历史记录中最后一个命令(相同参数)的副本。如果您觉得需要,只需点击向上箭头即可查看您已执行的操作。

于 2016-11-27T19:47:07.847 回答