在多窗口下,history 无法收集全部命令历史。想知道它是以何种规律收集历史的。
1
Howlaind 2020-02-21 09:29:12 +08:00 2
历史是 Shell 保存的,以 Bash 为例,它会在每次会话开始时读入~/.bash_history 文件,会话结束时保存。
所以当多个 Shell 同时运行时,~/.bash_history 只会存为最近一个关闭的 Shell 历史。 |
2
whileFalse OP @Howlaind #1 谢谢。请问如何解决此问题呢?
|
3
Howlaind 2020-02-21 09:49:48 +08:00 1
@whileFalse #2 搜索的结果大概是通过修改环境变量 PROMPT_COMMAND,加入'history -a; history -r'让每个命令执行后都写并读一次~/.bash_history 文件来解决。我自己没试过,请谨慎使用。
|
4
whatisnew 2020-02-21 09:54:13 +08:00
history 1
|
5
whileFalse OP @whatisnew #4 请问这个命令有什么作用?
|
6
Kobayashi 2020-02-21 21:05:06 +08:00 1
shell != terminal. 你这是 shell 问题。
既然上边回答 Bash 你没有反驳,我就当你是在用 Bash。Bash 历史存储在 $HISTFILE,默认为 ~/.bash_history. 问题在于历史并不是即时读写,而是当前 shell 退出时才写入。 解决方案: # Share history by PROMPT_COMMAND {{{ # make history share across sessions shopt -s histappend # dependency PROMPT_COMMAND="history -n;history -w;history -c;history -r${PROMPT_COMMAND:+;$PROMPT_COMMAND}" # }}} 通过钩子(实际 Bash 没有完善的钩子设计),每次将文件中历史与当前 shell 历史合并,并即时写入文件。这样所有开着的 shell 历史可以同步。 |