Постановка задачи
Я следовал за многочисленными примерами создания творческих вещей с историей bash по следующим направлениям:
# simplified example
PROMPT_COMMAND='history -a; history -c; history -r'
... но это, казалось, работало с перерывами. Если файл истории уже существует с предыдущей историей, то все в порядке.
Другая важная информация
- Версии bash: 3.2.51, 4.1.2 и 4.2.45
- 4.2.x, похоже, не имеет этой проблемы, но это не установка по умолчанию
- ОС: Linux и Solaris
- домашний каталог NFS монтируется
Диагностические этапы
Я избавился от своего .bashrc
и установил свой .bash_profile
в:
HISTFILE=$HOME/.bash_history.test
Затем я запускаю оболочку входа (например, ssh на другую машину) и делаю что-то вроде следующего:
~ cat .bash_history.test
cat: .bash_history.test: No such file or directory
~ history
1 cat .bash_history.test
2 history
~ history -a
~ !-3
cat .bash_history.test
cat: .bash_history.test: No such file or directory
Файл истории не будет добавлен history -a
при следующих обстоятельствах:
- Файл не существует
- Файл пуст или содержит только новые строки; даже пробел заставит это работать
... Однако, когда выходит из оболочки оно создает его. После этого history -a
работает как положено ... за исключением случаев, когда PROMPT_COMMAND="history -a; history -c; history -r"
. Когда у меня был этот набор, даже выход из оболочки не создавал файл истории (если я сначала не запустил exec bash
).
Затем я попытался с нестандартной установкой bash (4.2.x), и проблема не проявилась.