Здесь я укажу одну проблему с
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
а также
PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
Если вы запустите source ~ / .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'. Вы можете проверить PROMPT_COMMAND после каждого запуска 'source ~ / .bashrc', запустив 'echo $ 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