bash shell历史记录机制不可靠?

bash shell历史记录机制不可靠?

我在 bash 提示符下的典型工作流程包括键入命令并使用Ctrl+R“文字”机制检索它们。

我注意到在过去的几年里,有时命令会从 bash 历史记录中随机消失。

假设我输入并成功执行以下命令:

$ command A arg1 arg2
$ command B arg3
$ command C arg4

...然后输入Ctrl+R arg1- 例如,我收到“failed-reverse-i-search `arg1' ...”错误。

有趣的是,如果我跟进:

$ history | less

...command A确实不是历史...但我在历史记录的“第 0 列”中有一行以星号开头 - 第 0 列表示历史记录中记录的命令开始的列左侧的列 - 随后通过一个空行。

有人见过这样的东西吗?

这是在运行 bash 5.0.3 的 debian/linux stable (buster) 上。

答案1

有人见过这样的东西吗?

是的。重现:

  1. 跑步echo foo
  2. 跑步echo bar
  3. soecho foo出现(或Ctrl+ rfoo,soecho foo出现,然后按住以到达行尾)。
  4. 按住Backspace,变成echo foo空行,不执行。
  5. ,如此echo bar看来。
  6. Enter再次执行echo bar

然后history将在您可能期望的位置打印一个空条目echo foo。它将被标记有*含义该条目已被编辑

检查revert-all-at-newlinereadline 变量(参见man 3 readline)。

  • 临时设置:bind 'set revert-all-at-newline On'在 Bash 中运行。
  • 新 Bash 实例的持久设置:放置set revert-all-at-newline On/etc/inputrc或中~/.inputrc

答案2

如果命令之前有空格,则不会记录该命令。

相关内容