É possível tornar a escrita em .bash_history imediata?

95

Frequentemente abro muitos e muitos Terminais [neste momento tenho 7 abertos neste espaço de trabalho] e procuro frequentemente history com grep para encontrar um comando que acabei de escrever recentemente, mas não quero para caçar o terminal e, em seguida, rolar para cima e caçar mais, etc. Às vezes meus terminais fecham sem 'sair', e tudo que eu escrevi está perdido [Às vezes eu precisava de algo que eu tinha escrito em um terminal que foi morto].

Então existe uma maneira de fazer com que cada terminal grave em .bash_history imediatamente? ou pelo menos uma vez por minuto, ou algo parecido?

    
por Matt 16.10.2011 / 05:09

3 respostas

62

Uma solução simples, conforme detalhado em Atualizar o histórico de bash em tempo real .

Ele diz para colocar esses comandos na configuração .bashrc:

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

O primeiro comando altera o modo de arquivo .history para anexar. E o segundo configura o comando history -a para ser executado em cada prompt do shell. O -a escreve imediatamente as linhas atuais / novas no arquivo de histórico.

Relacionado para zsh:

por mario 16.10.2011 / 06:29
46

Tente colocar isso no seu .bashrc :

shopt -s histappend                      # append to history, don't overwrite it
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Críe aqui: link

history -c limpa o histórico da sessão em execução. Isso reduzirá o contador de histórico pela quantidade de $HISTSIZE . history -r leu o conteúdo de $HISTFILE e os inseriu no histórico atual da sessão em execução. Isso aumentará o contador de histórico pela quantidade de linhas em $HISTFILE .

Acho que isso significa que os comandos estão disponíveis quase que imediatamente (você tem um terminal, escreve echo 1 , segundo terminal echo 2 , primeiro echo 3 e depois de pressionar a seta para baixo duas vezes, você deve ter echo 2 disponível. Você deve emitir um comando em um determinado terminal para ter acesso ao que foi escrito.

    
por sup 24.03.2012 / 13:56
27

Eu tenho um arquivo de histórico grande com cerca de 100.000 entradas e as variantes que limpam a lista de histórico e leem todo o arquivo de histórico (usando history -c e history -r ) apresentam um atraso (talvez 0,2 segundo) antes do prompt é exibido. Usar history -n para que apenas novas linhas sejam lidas no arquivo de histórico é mais rápido:

shopt -s histappend
PROMPT_COMMAND='history -a;history -n'

PROMPT_COMMAND não precisa ser exportado porque é uma variável de shell.

    
por user4669748 12.09.2015 / 14:23

Tags