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


36

在了解了这shopt -s histappend 意味着什么之后,这似乎是一个非常理智的设置,令我感到惊讶的是它不是默认设置。为什么有人要在每个Shell出口上清除其历史记录?


除了对该选项的功能有误解-通过@maxscchlepzig进行了纠正-“默认”至少有两个来源:bash“ pure”或发行版.bashrc。对于前者,@ Gilles可能是正确的。从后一种意义上讲,例如Debian,自2008年以来-s histappend 默认设置:bugs.debian.org/cgi-bin/bugreport.cgi?bug=452459
underscore_d

3
嗯,unix是否不是因为健全的默认设置而闻名?我已经期望默认情况下最不友好的默认设置:P(略有夸张)
olejorgenb

Answers:


34

好吧,当histappend未设置时,这并不意味着在每个shell出口上都会清除历史记录。如果不使用histappendbash,则启动时将历史文件读入内存-在操作过程中添加新条目-并且在shell退出时,最后的HISTSIZE行被写入历史文件而无需附加,即替换先前的内容。

例如,如果历史文件包含400个条目,则在bash运行时期间将添加10个新条目-histsize设置为500,则新的历史文件包含410个条目。

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

与此无关:有些人出于隐私原因希望在shell退出时清除其历史记录。


同样,出于安全原因,最好不要为root用户保存历史记录。此功能允许root拥有shell历史记录,而无需保存到磁盘。
2012年

1
+1表示“并不意味着在每个shell出口上都清除了历史记录”。在其他地方对此进行了很好的解释-但可能不够简洁,无法吸引某些读者,尤其是在该选项名称的上下文中(好的,我可能有一段时间是其中的一位读者)。@Mei,或的排列与的历史记录histappend是否root到达磁盘有什么关系?再次,它只会影响什么写,没有如果
underscore_d

5
有没有人运行少于2个bash实例?histappend以及HISTCONTROL=ignoredups:erasedups:ignorespace似乎是一个很好的默认对大多数人来说。
2016年

histappend,如果我有有效的意义HISTFILESIZE=HISTSIZE=无限的历史?
Marc.2377

@ Marc.2377不,如果没有histappend同时运行的shell的新历史记录,那么该丢失,并且仅保存最后一个退出shell的条目。顺便说一句,我不知道它是否HISTSIZE=具有负面效果HISTSIZE
maxschlepzig

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.