为什么以空格开头的命令不会出现在 bash 历史记录中?

为什么以空格开头的命令不会出现在 bash 历史记录中?

在 bash 中,当我使用 Ctrl-R 检索上一个命令时,为什么当命令以空格开头时它不起作用?我可以让它匹配以前的命令吗?

$  date
Fri Nov 23 ... 2018
(failed reverse-i-search)` date': cd database/

答案1

检查环境变量的值HISTCONTROL。如果该值包含ignorespaceignoreboth,则任何以空格开头的命令都不会添加到命令历史记录中。

man bash

HISTCONTROL:以冒号分隔的值列表,控制命令如何保存在历史列表中。如果值列表包含ignorespace,则以空格字符开头的行不会保存在历史列表中。 ignoredups 值会导致不保存与先前历史记录条目匹配的行。 ignoreboth 的值是ignorespace 和ignoredups 的简写。 erasedups 值会导致在保存该行之前从历史列表中删除与当前行匹配的所有先前行。任何不在上面列表中的值都将被忽略。如果 HISTCONTROL 未设置,或者不包含有效值,则 shell 解析器读取的所有行都将保存在历史列表中,具体取决于 HISTIGNORE 的值。多行复合命令的第二行和后续行不进行测试,并且无论 HISTCONTROL 的值如何,都会添加到历史记录中。

答案2

这是有意的。空格不会改变命令的解释。历史记录会忽略以空格开头的命令,以便您可以输入不想记录的命令。它可能不是一种安全机制,因为同一台计算机上的某人可以在您执行此操作时进行监视。

我认为可以重新配置。请参阅历史记录下的 bash 手册。

相关内容