为什么有人不在 bash 中设置“histappend”?

tsh*_*ang 48 bash command-history

在了解这shopt -s histappend 意味着什么之后,这似乎是一个非常理智的设置,我很惊讶它不是默认设置。为什么有人想在每个 shell 退出时擦除他们的历史记录?

max*_*zig 46

好吧,whenhistappend未设置,这并不意味着在每个 shell 退出时都会擦除历史记录。没有histappendbash 在启动时将 histfile 读入内存 - 在操作期间添加新条目 - 在 shell 退出时,最后的 HISTSIZE 行被写入历史文件而不附加,即替换以前的内容。

例如,如果 histfile 包含 400 个条目,则在 bash 运行时添加 10 个新条目 - histsize 设置为 500,则新 histfile 包含 410 个条目。

仅当您并行使用更多 bash 实例时,此行为才会有问题。在这种情况下,历史文件只包含最后退出的 shell 的内容。

与此无关:由于隐私原因,有些人希望在 shell 退出时擦除他们的历史记录。

  • 有没有人运行少于 2 个 bash 实例?`histappend` 和 `HISTCONTROL=ignoredups:erasedups:ignorespace` 对大多数人来说似乎是一个很好的默认设置。 (7认同)
  • @dashesy 我个人不喜欢忽略/删除重复的条目。我启用了 HISTTIMEFORMAT,并且我希望能够返回并查看我何时发出命令...如果我多次发出该命令,我想知道每个命令的发出时间。这是个人喜好,他们自己的。;) (3认同)
  • @Marc.2377 不,如果没有“histappend”,来自同时运行的 shell 的新历史记录将会丢失,并且只会保存最后一个退出 shell 的条目。顺便说一句,我不知道“HISTSIZE=”是否与负值“HISTSIZE”具有相同的效果。 (2认同)

Gil*_*il' 11

我猜是为了历史兼容性。该histappend选项直到 bash 2.0 才存在。

  • @Tshepang:是的,如果你不使用 `histappend`,就和现在一样。 (4认同)