为什么 bash 有时会忘记之前输入的命令?

为什么 bash 有时会忘记之前输入的命令?

在 Ubuntu Lucid 系统上遇到了一个奇怪的情况:

bash 命令行大多数时候都运行良好,但出于某种原因,有时Up无法调用上一个命令。它记住了之前的命令,但好像最后一个命令被遗忘了。所以必须重新输入或复制粘贴,真的很烦人……

知道这可能是什么原因造成的吗?

bash 版本是发行版附带的版本,4.1.5(1)-release(软件包:4.1-2ubuntu3)

答案1

以空格开头的命令通常不会存储在 bash 的历史记录中。这是一项功能:如果您希望 bash不是要将命令放入历史记录中,例如 这样的危险命令rm -rf ...,请在其前面放置一个空格。此外,重复的命令可能会被忽略。

此行为可通过HISTCONTROL变量配置。来自man bash

组织控制

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

要查看你的 shell 是如何配置的,请运行:

echo $HISTCONTROL

要更改为新设置,请编辑您的~/.bashrc文件。

相关内容