Manipulação do histórico de bash com múltiplos terminais

93

Eu uso principalmente o Terminator, e geralmente é aberto com 3 janelas de terminal divididas. Eu também uso o terminal Gnome por várias razões.
Eu estou querendo saber como é o histórico bash tratado neste caso, como às vezes sinto falta de comandos previamente emitidos quando eu corro history

Por exemplo, meu prompt mostra a linha do histórico de bash atual ( \! ) e se eu lançar o Terminator com 3 janelas de terminal divididas, recebo a mesma linha de histórico (digamos 100) em todos os terminais. Qual história será salva?

Também lançando o Gnome Terminal após usar o Terminator Eu recebo a linha 100 na inicialização, independentemente de todos os comandos emitidos antes no Terminator

    
por zetah 18.11.2011 / 07:39

4 respostas

84

A sessão do bash salva é aquela para o terminal que está fechado mais recente. Se você quiser salvar os comandos para cada sessão, você pode usar o truque explicado aqui .

export PROMPT_COMMAND='history -a'

To quote the manpage: “If set, the value is executed as a command prior to issuing each primary prompt.”

So every time my command has finished, it appends the unwritten history item to ~/.bash_history before displaying the prompt (only $PS1) again.

So after putting that line in /etc/bash.bashrc I don’t have to find myself reinventing wheels or lose valuable seconds re-typing stuff just because I was lazy with my terminals.

De qualquer forma, você precisará levar em conta que os comandos de diferentes sessões serão misturados em seu arquivo de histórico, por isso não será tão fácil lê-lo depois.

Veja também:

por jcollado 18.11.2011 / 07:52
28

Após várias leituras de man bash , eu uso arquivos de histórico separados para cada shell. Eu fiz um mkdir -m 0700 ~/.history e então adicionei

[[ -d ~/.history ]] || mkdir --mode=0700 ~/.history
[[ -d ~/.history ]] && chmod 0700 ~/.history
HISTFILE=~/.history/history.$$
# close any old history file by zeroing HISTFILESIZE  
HISTFILESIZE=0  
# then set HISTFILESIZE to a large value
HISTFILESIZE=4096  
HISTSIZE=4096  

para o meu ~/.bashrc . De vez em quando, lembro-me de du -sk .history e limpe-o. É legal ter todos os comandos que eu digitei preservados para mim.

Acabei de usar o acima para ver o que eu vinha fazendo ultimamente:
cut -f1 "-d " .history/* | sort | uniq -c |sort -n -r |less
ou cut -f1-2 "-d " .history/* | sort | uniq -c |sort -n -r |less
(para incluir o primeiro argumento, por exemplo, sudo mount na cadeia de classificação).

    
por waltinator 20.11.2011 / 00:48
5

Para mostrar history de todos os terminais:

Adicione export PROMPT_COMMAND='history -a; history -r' ao seu arquivo .bashrc.

Fonte: link

por Elijah Lynn 31.10.2013 / 20:17
4

Veja também " mantendo histórico persistente no bash " por outro alternativa. Ele coloca o seu prompt para enviar todos os comandos já digitados no qualquer terminal em um arquivo "histórico persistente" (ao lado do que normalmente é feito para o .history normal).

    
por Eli Bendersky 25.01.2016 / 00:33