histórico do bash para a sessão atual

15

Talvez eu esteja ignorando alguma coisa, mas existe uma maneira de obter seu histórico atual do bash para a sessão atual que você está usando como

se eu correr

ssh host
$ pwd
$ ls
$ cd /tmp

Eu só quero ver esses 3 comandos e nada mais

Mike
fonte
você verificou o historycomando ??
Hackaholic
ya eu sei sobre history, mas que não dá apenas a minha sessão
Mike
A quantia economizada entre as sessões é controlada pela variável do shell SAVEHIST, se bem me lembro. Assim, se a quantidade de história guardou última vez foi zero, então você deseja obter história para a sessão shell atual (mas é claro que não nos níveis sub)
MDPC
@ MDPC, que documentos você está lendo? Na página de manual do Bash, não encontro referência ao SAVEHIST, mas apenas a HISTSIZEe HISTFILESIZE.
Curinga

Respostas:

15

Uma maneira ligeiramente indireta:

history -a ~/current_history

Isso salvará o histórico do bash não salvo da sessão atual ~/current_history, para o qual você poderá visualizar.

muru
fonte
isso poderia funcionar, mas não lidar com várias sessões .. Eu acho que eu pode criar um arquivo temporário aleatório para armazená-lo em
Mike
1
@ Mike use um nome conectado ao PID do shell, talvez ~/$$_history.
Muru
4
Vale a pena notar que isso não limpará o histórico nem afetará o salvamento normal do histórico! Eu não tinha certeza até testar. :)
NHDaly 29/01
Acho mais conveniente fazê history -a-lo, juntamente com o histórico anterior, em ~ / .bash_history ... o que pode ser um problema se o seu histórico for maior que o cutoff, que é 1000 nos meus sistemas centos7 e fedora 24.
Ray Foss
0

Eu tive o problema de querer escrever a corrente historyem um arquivo, mas ainda queria que as entradas fossem registradas no bash principalhistory

Resolvi isso anexando o arquivo com cat:

history -a current-history
cat current-history >> .bash_history
nath
fonte
-1

Use comppara comparar o histórico inteiro (incluindo a sessão atual do Bash) com o histórico já persistido .bash_historye imprimir apenas as linhas exclusivas da sessão atual - que devem mostrar apenas os comandos que foram executados desde o início do shell do Bash atual

comm -23 <( history | cut -c 8- ) ~/.bash_history

Edit: como @Wildcard apontou este comando não funciona para todas as distribuições de comm. Eu testei isso no Mac OS.

Uma variação da mesma ideia usando diff:

diff <( history | cut -c 8- ) ~/.bash_history | sed -n 's/^< //pg'
Christian Kadner
fonte
Um bom pensamento, mas muito pouco confiável nos meus testes. commassume entrada classificada. Bem-vindo ao Stack Exchange! :)
Curinga
@Wildcard, ambos os lados da entrada commsão classificados inerentemente no meu exemplo acima. Você executou? E não produziu seu histórico atual de sessões do Bash?
Christian Kadner
Sim, eu fiz, e não, não. E não, o conteúdo de não~/.bash_history é classificado; e também não é a saída ordenada quando os números das linhas principais são removidos. (Além do que, espera entrada lexicograficamente classificada, não entrada numericamente.)historycomm
Curinga
Certo, eu quis dizer que os dois argumentos para o commcomando no meu exemplo estão na mesma ordem, não que sejam ordenados lexicográficos. A versão FreeBSD de commnão exigir a entrada lexicographically ordenada
Christian kadner
Estou usando o Mac OS X. Não tem nada a ver com isso. Olhando mais de perto, parece haver os primeiros comandos do histórico da memória, que foram substituídos no arquivo de histórico por outros shells existentes.
Curinga