重新运行多个历史命令

ina*_*lus 30 bash command-history

想象一下,您刚刚运行了十几个命令。说...

$ cd foo/    # history cmd #10000 (my history is very long)
$ ... more commands ...
$ cd ../     # history cmd #10012 
Run Code Online (Sandbox Code Playgroud)

我知道我可以重新运行它们,!-12 && !-11 && !-10 && (and so on) && !!如果它们碰巧刚刚运行(不太可能)或!10000 && !10001 && !10002 && (and so on),但是有没有比用 bang 和&符号手动输入每个历史数字更简单的方法?

在 bash 中是否有某种我不知道的范围的东西?

例如!{10000-10012}#这样的东西,只能工作。

jw0*_*013 33

这就是fc命令的用途。对于最后 12 个命令:

fc -12 -1
Run Code Online (Sandbox Code Playgroud)

或者对于编号为 #10000 到 #10012 的命令

fc 10000 10012
Run Code Online (Sandbox Code Playgroud)

这不是您想要的,因为它会首先启动一个编辑器,但这可能是一件好事,因为它让您有机会仔细检查您是否拥有正确的命令,甚至可以使用您最喜欢的编辑器的所有功能对其进行编辑。保存更改并退出编辑器后,命令将一个接一个地运行。

  • @okwap,废话。它是 [POSIX 指定](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/fc.html),当然在 Ubuntu 中可用。(不过,它是一个内置的外壳程序——因为它*必须*——所以如果你在 `/bin` 中查找,你将找不到它。) (3认同)
  • 为了避免启动编辑器(危险!),您可以使用`fc -e true -12 -1` (2认同)
  • 如果您在编辑器中决定要中止后删除内容,这是唯一的方法吗?(如果我输入 `:q!`,Vim 会退出但命令仍然执行)。这是 [手册页](https://www.systutorials.com/docs/linux/man/1p-fc/),如果它对其他人有帮助的话。 (2认同)
  • @WilliamTurrell 您可以尝试使用非零退出代码退出编辑器,我听说 `:cq` 将在 Vim 中执行此操作。 (2认同)