据我所知,单个 shell 的历史记录仅在 shell 关闭时附加到 .bash_history 文件中。这意味着我经常在崩溃/内核崩溃时丢失单个 shell 的历史记录。
为什么只有在关闭会话时才会写入历史记录?有没有办法在执行时写入每个命令?有什么理由我不希望在执行时写入每个命令(例如,写入巨大的 bash_history 文件时的性能问题)?
(我正在使用 Mac OS X 10.6 并使用 iTerm 同时运行多个选项卡式终端。我已设置 histappend 以及一些其他选项。
export HISTSIZE=1000000
export HISTTIMEFORMAT="%d/%m/%y %T "
shopt -s histappend
)
答案1
你的 .bashrc 中缺少一行。添加:
PROMPT_COMMAND="$PROMPT_COMMAND;history -a"
后
shopt -s histappend
PROMPT_COMMAND 是在打印下一个提示之前执行的(如果我没记错的话)。顺便说一句,你对写入历史记录的时间的说法是正确的。修改后的提示命令将刷新历史记录。