无需按太多即可重新运行多个命令

无需按太多即可重新运行多个命令

令人尴尬的是,我经常发现自己重复了很多以前的命令。我Up Up Up去找第一个命令。Enter。然后Up Up Up再次执行第二个命令。等等。

有没有办法在重新运行命令后进入历史记录中的下一个命令?就像执行Up Up Up Shift+ Enter Shift+ Enter Shift+Enter重新运行最后三个命令一样很棒。

我知道fc,但这不仅仅是关于外壳。我在 Python 解释器中以及基本上在任何我输入命令的地方都遇到了这个问题。

答案1

所有这些都与您的 shell 历史有关bash,我刚刚注意到您可能在询问 Python。我希望这会有所帮助。

如果你history看起来像:

1000   command A
1001   other command B
1002   yet another command C

你可以运行: !com

这将运行以 ' ' 开头的最后一个命令com,您可以有任意数量的字符(!c!command),然后跟随!oth!yet以便能够按顺序运行每个命令。

您还可以运行!1000重新运行历史条目#1000,然后您知道!1001并将!1002运行接下来的两个命令。

就我个人而言,如果我想像这样运行一系列命令,我可能会像同一个命令一样运行多个命令,并为其提供一个历史记录条目:

command A; other command B && yet another command C

或者,创建一个别名:

$ alias doThing="command A; other command B && yet another command C"
$ doThing

或者,一个函数:

doThing() {
  command A
  other command B && yet another command C
  # Can also use positional arguments:  echo $1
}
$ doThing

考虑到所有这些,我不知道能够完全按照您的期望去做,抱歉。

答案2

在 中bash,如果您运行history并看到要运行的三个命令编号为 1000、1001 和 1002:

$ history | tail 
...
1000  echo foo
1001  echo bar 
1002  echo baz 
1003  history | tail

在 中bash,您可以通过在行号前加上 . 来仅运行其中一个!。您还可以在一行上运行所有这些,并用分号分隔:

$ !1000;!1001;!1002
echo foo;echo bar;echo baz
foo
bar
baz

注意:像往常一样,当使用!历史记录执行命令时,它首先显示要执行的命令行。

这在你的 python 解释器或大多数其他程序中可能不一样。它在其他一些 shell 中的工作方式确实类似,具有类似的历史功能。

顺便说一句,这个组合命令现在将在历史记录中仅作为一行:

$ history | tail -2
1004  echo foo;echo bar;echo baz
1005  history | tail -2

您可以使用 再次运行它!1004

答案3

Ctrl+ O。你可以通过Up, Up,Up然后 Ctrl+ O, Ctrl+ O, Ctrl+O来执行最后三个命令。

由于这些命令被重新添加到历史记录中,您可以按住Ctrl+O重复执行这一系列命令。

来自阅读在线文档:

operate-and-get-next Ctrl+ O:

接受当前行以返回到调用应用程序,就好像已输入换行符一样,并从历史记录中获取相对于当前行的下一行以进行编辑。数字参数(如果提供)指定要使用的历史记录条目,而不是当前行。

这是 Readline 8.1 中相对较新的新增内容。 (2020 年 12 月。)

相关内容