是否有在 bash 中重复第二个邻近命令的快捷方式?

是否有在 bash 中重复第二个邻近命令的快捷方式?

我们都知道!!可以重复您在 bash 中执行的最后一个命令。

但有时我们需要做一些操作,比如

$ python test.py
$ vim test.py

$ python test.py # here is where I need to repeat the second proximate bash command

我可以使用向上箭头键来做到这一点,但这需要我将右手移到一个不舒服的位置。所以我想知道是否有一个类似的命令!!可以工作?

答案1

您可以使用!-2:

$ echo foo
foo
$ echo bar
bar
$ !-2
echo foo
foo

这可能对你右手的情况没有帮助。

您还可以使用!string历史搜索此类案例:

$ python test.py
$ vim test.py
$ !py
python test.py # Printed, then run

这样使用起来可能会更方便。它将运行:

历史列表中当前位置之前的最新命令,开头为细绳

即使只是这样!p也行。您可以用来!?string搜索整个命令行,而不仅仅是开头。

答案2

!-2

还有更多乐趣。假设您想继续操作一个文件(如上所述,您重复使用 test.py):

cp foo.py thing.py
edit $_
python $_
!-2
^thing^foo
  • 将现有文件复制到thing.py
  • 编辑(vim、emacs - 如果你运行的是 Emacs-OS,为什么要使用命令行,我不知道)thing.py- 上一个命令行中的最后一个词
  • python thing.py
  • 编辑thing.py
  • 编辑foo.py

操纵历史真是太有趣了。尝试man history。请注意,寻求重用历史记录可能会导致输入的内容远远多于命令本身。最后的命令替换(我将 thing.py 替换为 foo.py)就是一个这样的例子。只需输入命令和名称即可减少字符。 :)

历史记录替换也是您尝试时收到奇怪消息的原因:

$ echo "This is a disaster!"
-bash: !": event not found

感叹号被用作历史参考,并且它无法找到带有双引号的先前命令。

相关内容