我经常screen
在我的 Linux 桌面和服务器上运行多个会话。
这样做的问题是,当我grep
浏览我的命令历史记录时,我发现我在不同的会话中发出了一个命令,并且必须分离并重新连接才能获取该历史记录项。
是否可以“强制”将多个会话中不同更新的历史记录全部转移到中心历史记录?
答案1
您需要做两件事:
shopt -s histappend
在您的 中插入命令.bashrc
。这将附加到历史文件而不是覆盖它。- 另外,在您的 中
.bashrc
插入,PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
每次 bash 显示提示时,历史文件都会被重写和重新读取。
编辑:感谢 e-t172 提供的history -n
技巧
答案2
请不要使用history -a; history -n
,它不会按预期工作,并且会在您的历史记录中留下许多重复、无序的命令。通常按预期工作的解决方案如下:
# unified bash history
shopt -s histappend
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
使用换行符代替分号也是解决 PROMPT_COMMAND 缺失/重复分号问题的一种简便方法。
答案3
这里的任何解决方案都不适合我,但确实有效的只是使用:
cat ~/.bash_history | grep something
代替
history | grep something
感谢这所以回答。
答案4
在某些发行版中,PROMPT_COMMAND 默认未定义。例如,它在 Arch 中定义,但在 Debian 中未定义。
我的 Dropbox 中有一个 bashrc,我在跨发行版时使用它,它包括:
PROMPT_COMMAND="$( [ '$PROMPT_COMMAND' ] && echo $PROMPT_COMMAND; )history -a; history -n"