如何在 bash 中启用 Windows 风格的命令历史记录遍历之类的功能?

如何在 bash 中启用 Windows 风格的命令历史记录遍历之类的功能?

就我个人而言,我更喜欢 Windows 方式的命令历史记录遍历(抱歉!),其中每个命令都保留其在历史记录中的位置,并且当您返回到最后执行的命令时,它不一定是历史记录中的最后一个命令。

不确定这是否有意义,所以我将尝试用示例进行解释。

重击

假设我执行了四个命令(one、、、、)。此后,命令历史记录(从最早到最近)如下所示:twothreefour

  • one
  • two
  • three
  • four

现在,如果我按三次向上键,我将按预期返回到four、然后three、然后。two如果我按 Enter 键,我将执行 command two。现在历史看起来像这样:

  • one
  • two
  • three
  • four
  • two

如果我按我就会看到two。如果我再按一次,我就会看到four等等。

视窗

假设我执行了相同的四个命令(、、、、one)。此后,命令历史记录(从最早到最近)如下所示:twothreefour

  • one
  • two
  • three
  • four

现在,如果我按三次向上键,我将像以前一样返回到four、然后three、然后two。如果我按 Enter 键,我将执行 command two。现在再次按下,它仍然会显示two。但历史仍然是这样的:

  • one
  • two
  • three
  • four

这意味着我已经“跳回”到了历史的较早时刻。我现在可以按查看one查看three等。

为什么这很有用

当您刚刚运行了一系列命令并且想要再次运行它们时,这特别有用。它涉及显著地更少的击键即可再次运行整个系列。

有没有办法让 bash 也有同样的行为?

答案1

这并不能直接回答您的问题,但如果最终没有真正的答案,它可能会有所帮助。

如果您执行了一些命令序列:

$ one
$ two
$ three
$ four

$ history
1  one
2  two
3  thee
4  four

如果您想再次执行该序列,可以执行以下操作:

!1; !2; !3; !4

或者,如果您只想在前面的命令成功时才执行后续命令:

!1 && !2 && !3 && !4

然后,您将在历史记录中看到这样的条目:

$ history
1  one
2  two
3  three
4  four
5  one; two; three; four
6  one && two && three && four

然后,如果您想再次重新执行该序列,您可以使用箭头或仅使用,例如,!5

相关内容