Costumo abrir muitos terminais (no momento, tenho sete abertos neste espaço de trabalho) e frequentemente pesquiso history
para grep
encontrar um comando que acabei de escrever recentemente, mas não quero procurar o terminal e depois rolar levante-se e cace-o.
Às vezes, meus terminais fecham sem exit
e tudo o que escrevi neles é perdido. Às vezes, eu precisava de algo que escrevi em um terminal que foi eliminado.
Existe uma maneira de fazer com que cada terminal grave .bash_history
imediatamente? Ou pelo menos uma vez por minuto, ou algo parecido?
Responder1
Uma solução simples é detalhada emAtualizar histórico do Bash em tempo real.
Diz para colocar esses comandos na configuração .bashrc:
shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
O primeiro comando altera o modo do arquivo de histórico para anexar e o segundo configura o history -a
comando para ser executado em cada prompt do shell. A -a
opção permite history
gravar imediatamente as linhas atuais/novas no arquivo de histórico.
Deman bash
:
Se a opção histappend shell estiver habilitada (veja a descrição de shopt em SHELL BUILTIN COMMANDS abaixo), as linhas serão anexadas ao arquivo de histórico, caso contrário, o arquivo de histórico será sobrescrito.
Relacionado para Zsh:
Responder2
Tente colocar isso em seu .bashrc
:
shopt -s histappend # append to history, don't overwrite it
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Crédito aqui:https://stackoverflow.com/questions/103944/real-time-history-export-amongst-bash-terminal-windows/3055135
history -c
limpa o histórico da sessão em execução. Isso reduzirá o contador do histórico na quantidade de $HISTSIZE
. history -r
leia o conteúdo $HISTFILE
e insira-o no histórico da sessão em execução atual. Isso aumentará o contador do histórico pela quantidade de linhas no arquivo $HISTFILE
.
Acho que isso significa que os comandos estão disponíveis quase imediatamente (você tem um terminal, write echo 1
, segundo terminal echo 2
, primeiro echo 3
e ao 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 tem foi escrito.
Responder3
Eu tenho um grande arquivo de histórico 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
) introduzem um atraso perceptível (talvez 0,2 segundo) antes que o prompt seja exibido. Usar history -n
para que apenas novas linhas sejam lidas do 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 shell.
Responder4
Uma observação para todas as outras respostas (que são basicamente a mesma coisa):
Definir-se PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
no .bashrc
(ou amigos) é o suficiente.
Além disso, você pode executar manualmente history -a
sempre que desejar "capturar um instantâneo" do histórico na sessão atual.
O comando shopt -s histappend
não é necessário porque history -a
sempre acrescenta novas linhas ao arquivo e nunca o sobrescreve. Além disso, pelo menos a partir do Bash 4, histappend
é o comportamento padrão.