Когда и как добавляется bash_history?

2777
keflavich

Насколько я могу судить, история отдельной оболочки добавляется в файл .bash_history только тогда, когда оболочка закрыта. Это означает, что я часто теряю историю отдельных оболочек при сбоях / панике ядра.

Почему история пишется только при закрытии сессии? Есть ли способ, чтобы каждая команда была написана во время выполнения? Есть ли какая-то причина, по которой мне не нужно писать каждую команду во время выполнения (например, проблемы с производительностью при записи в огромный файл bash_history)?

(Я использую Mac OS X 10.6 и запускаю множество терминалов с вкладками одновременно с iTerm. У меня настроен гистапенд вместе с некоторыми другими опциями.

export HISTSIZE=1000000 export HISTTIMEFORMAT="%d/%m/%y %T " shopt -s histappend 

)

6

1 ответ на вопрос

4
james

Вам не хватает одной строки в вашем .bashrc. Добавлять:

PROMPT_COMMAND="$PROMPT_COMMAND;history -a"

после

shopt -s histappend

PROMPT_COMMAND выполняется перед печатью следующего приглашения (IIRC). Кстати, когда вы пишете историю, вы правы. Измененная команда приглашения очистит историю.

Я бы рекомендовал поместить `PROMPT_COMMAND =" $ PROMPT_COMMAND; history -a "` в `.bash_profile`, так как это рекурсивное выражение, и для каждого уровня вложенности bash будет добавляться следующий ненужный вызов history -a. czerny 6 лет назад 0