我在 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
有人见过这样的东西吗?
是的。重现:
- 跑步
echo foo
。 - 跑步
echo bar
。 - ↑↑so
echo foo
出现(或Ctrl+ rfoo
,soecho foo
出现,然后按住→以到达行尾)。 - 按住Backspace,变成
echo foo
空行,不执行。 - ↓,如此
echo bar
看来。 - Enter再次执行
echo bar
。
然后history
将在您可能期望的位置打印一个空条目echo foo
。它将被标记有*
含义该条目已被编辑。
检查revert-all-at-newline
readline 变量(参见man 3 readline
)。
- 临时设置:
bind 'set revert-all-at-newline On'
在 Bash 中运行。 - 新 Bash 实例的持久设置:放置
set revert-all-at-newline On
在/etc/inputrc
或中~/.inputrc
。
答案2
如果命令之前有空格,则不会记录该命令。