Quando e como o bash_history é anexado?

6

Tanto quanto eu posso dizer, a história de um shell individual é anexada somente ao arquivo .bash_history quando o shell é fechado. Isso significa que eu freqüentemente perco históricos de shells individuais em panes / kernel panics.

Por que a história só é escrita ao fechar uma sessão? Existe uma maneira de ter cada comando escrito no momento da execução? Existe algum motivo para eu não querer ter cada comando escrito no momento da execução (por exemplo, problemas de desempenho ao gravar em um arquivo bash_history enorme)?

(Estou usando o Mac OS X 10.6 e executando muitos terminais com guias simultaneamente com o iTerm. Tenho o histappend configurado junto com algumas outras opções.

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

)

keflavich
fonte

Respostas:

4

Você está perdendo uma linha em seu .bashrc. Adicionar:

PROMPT_COMMAND="$PROMPT_COMMAND;history -a"

depois de

shopt -s histappend

PROMPT_COMMAND é executado imediatamente antes do próximo prompt ser impresso (IIRC). Você está certo sobre quando a história está escrita, a propósito. O comando prompt modificado irá liberar o histórico.

james
fonte
Eu prefiro recomendar para colocar PROMPT_COMMAND="$PROMPT_COMMAND;history -a" em .bash_profile uma vez que é uma expressão recursiva e para cada nível de aninhamento de bash acrescentará próximo desnecessário history -a ligar.
czerny