Eu muitas vezes abertas e lotes de terminais [Agora eu tenho 7 aberto neste espaço de trabalho] e muitas vezes eu procurar history
com grep
para encontrar um comando Acabo de escrever recentemente, mas eu não quero caçar o terminal e, em seguida, vá para cima e caçar mais, etc. Às vezes, meus terminais fecham sem 'saída' e tudo o que escrevi se perde [às vezes eu precisava de algo que escrevi em um terminal que foi morto].
Portanto, existe uma maneira de fazê-lo para que cada terminal grave imediatamente no .bash_history? ou pelo menos uma vez por minuto, ou algo assim?
control-r
a pesquisa reversa no histórico de comandos de um bash. Mais conveniente do que ahistory | grep
menos que você precise de uma regex.Respostas:
Uma solução simples, conforme detalhado no histórico de atualizações do Bash em tempo real .
Ele diz para colocar esses comandos na configuração .bashrc:
O primeiro comando altera o
.history
modo de arquivo para acrescentar. E o segundo configura ohistory -a
comando a ser executado em cada prompt do shell. Ele-a
grava imediatamente as linhas atuais / novas no arquivo de histórico.Relacionado para zsh:
fonte
Tente colocar isso no seu
.bashrc
: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 de histórico pela quantidade de$HISTSIZE
.history -r
leia o conteúdo$HISTFILE
e insira-o no histórico atual da sessão em execução. Isso aumentará o contador do histórico pela quantidade de linhas inseridas$HISTFILE
.Eu acho que isso significa que os comandos estão disponíveis quase que imediatamente (você tem um terminal, gravação
echo 1
, segundo terminalecho 2
, primeiroecho 3
e, pressionando a seta para baixo duas vezes, você deve terecho 2
disponível. Você deve emitir um comando em um determinado terminal para ter acesso ao que possui foi escrito.fonte
man history
... #bash
built-in, portanto é descrito emman bash
. Você também pode usarhelp history
.-r
e-c
vs apenas ter-a
.history -c; history -r
? Eu acho que é melhor para você, seria melhor para mim apenas algumas vezes, eu geralmente uso várias conchas para fazer um trabalho, então prefiro ter a história o mais combinada possível. Na verdade, eu me importo que o comando seja gravado na história somente depois que terminar. Normalmente, quando inicio uma sessão ssh em um host e quero abrir outro enquanto o primeiro ainda está em execução, preciso digitá-lo novamente, porque ainda não foi gravado no histórico.history -a
pode bastarEu tenho um arquivo de histórico grande com cerca de 100000 entradas e as variantes que limpam a lista de histórico e leem o arquivo de histórico inteiro (usando
history -c
ehistory -r
) apresentam um atraso notável (talvez 0,2 segundo) antes que o prompt seja exibido. Usarhistory -n
para que apenas novas linhas sejam lidas do arquivo de histórico é mais rápido:PROMPT_COMMAND
não precisa ser exportado porque é uma variável de shell.fonte
Uma observação para todas as outras respostas (que são basicamente a mesma coisa):
Definir
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
no.bashrc
(ou amigos) é suficiente.Além disso, você pode executar manualmente
history -a
sempre que desejar "capturar instantaneamente" o histórico na sessão atual.O comando
shopt -s histappend
não é necessário porquehistory -a
sempre acrescenta novas linhas ao arquivo e nunca o substitui. Além disso, pelo menos a partir do Bash 4,histappend
é o comportamento padrão.fonte
shopt -s histappend
. Observe também eu adicionei-o ao meu~/.bash_profile
histappend
, pois esse é o comportamento padrão. Eu procuraria, mas não tenho acesso a um Mac.