在这里,我将指出一个问题
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
和
PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
如果运行源〜/ .bashrc,则$ PROMPT_COMMAND将类似于
"history -a; history -c; history -r history -a; history -c; history -r"
和
"history -a; history -n history -a; history -n"
每当您运行“ source〜/ .bashrc”时,都会发生此重复。您可以在每次运行“ source〜/ .bashrc”后通过运行“ echo $ PROMPT_COMMAND”来检查PROMPT_COMMAND。
您可能会看到一些命令显然已损坏:“ history -n history -a”。但是好消息是它仍然有效,因为其他部分仍然形成了有效的命令序列(由于重复执行一些命令,这会涉及一些额外的费用。而且不是那么干净。)
我个人使用以下简单版本:
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r"
具有大多数功能,而没有上述问题。
值得一提的是:真的没有魔术。PROMPT_COMMAND只是一个普通的bash环境变量。在收到bash提示($符号)之前,将执行其中的命令。例如,您的PROMPT_COMMAND是“ echo 123”,并且您在终端中运行“ ls”。效果就像运行“ ls; echo 123”。
$ PROMPT_COMMAND="echo 123"
输出(就像运行'PROMPT_COMMAND =“ echo 123”; $ PROMPT_COMMAND'一样):
123
运行以下命令:
$ echo 3
输出:
3
123
“ history -a”用于将内存中的历史记录命令写入〜/ .bash_history
“ history -c”用于清除内存中的历史记录命令
“ history -r”用于从〜/ .bash_history读取历史命令到内存
请在此处查看历史记录命令说明:http : //ss64.com/bash/history.html
PS:正如其他用户所指出的,导出是不必要的。请参阅:在.bashrc中使用export