就我个人而言,我更喜欢 Windows 方式的命令历史记录遍历(抱歉!),其中每个命令都保留其在历史记录中的位置,并且当您返回到最后执行的命令时,它不一定是历史记录中的最后一个命令。
不确定这是否有意义,所以我将尝试用示例进行解释。
重击
假设我执行了四个命令(one
、、、、)。此后,命令历史记录(从最早到最近)如下所示:two
three
four
one
two
three
four
现在,如果我按三次向上键,我将按预期返回到four
、然后three
、然后。two
如果我按 Enter 键,我将执行 command two
。现在历史看起来像这样:
one
two
three
four
two
如果我按↑我就会看到two
。如果我再按一次,我就会看到four
等等。
视窗
假设我执行了相同的四个命令(、、、、one
)。此后,命令历史记录(从最早到最近)如下所示:two
three
four
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