Posso pesquisar facilmente meu histórico em muitas janelas de tela?

11

Minha sessão screen atual tem 12 janelas abertas. Está em execução há semanas ... Sei que executei um comando ImageMagick convert em um destas 12 janelas de tela em algum momento da semana passada ... existe alguma maneira de pesquisar facilmente o histórico do Bash? das 12 instâncias, sem fechá-las ou executar history | grep convert em todas as 12 telas?

    
por Josh 20.01.2011 / 00:23

4 respostas

18

Você pode executar history -a; history -c em todas as janelas para salvar o histórico. E então history -r para atualizá-lo.

Para resolvê-lo, adicione-o permanentemente ao seu .bashrc :

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
    
por 20.01.2011 / 17:35
1

Parece difícil. Aqui estão alguns métodos que podem funcionar para você.

Se você tiver ferramentas de contabilidade de processo instaladas (no Linux, procure um pacote chamado acct ) e a permissão para usá-las, você pode descobrir quando e possivelmente em qual terminal você executou convert :

lastcomm convert

Se isso não estiver disponível ou não for conclusivo, você poderá executar um comando history em cada instância do bash para procurar por comandos convert . Isto irá encontrar comandos que estavam no arquivo de histórico quando o bash também foi iniciado.

: >/tmp/convert.history
for w in $(seq 0 11); do
  screen -p $w -X stuff \
    'history | sed 's/^.*convert/'$w'&/" >>/tmp/convert.history
'; done
  • $(seq 0 11) itera sobre os números de suas janelas de tela. Certifique-se de ignorar as janelas que não estão atualmente em execução bash mas algum outro processo que interpretaria a entrada de forma diferente.
  • screen -p $w stuff … envia a seguinte string como entrada para a janela especificada. Você precisa da nova linha no final da string.
  • O arquivo /tmp/convert.history conterá uma lista de linhas como 3 convert foo.jpg , se você executou convert foo.jpg na janela 3.
por 20.01.2011 / 00:49
1

tcsh permite que você compartilhe o histórico entre as sessões através do uso do alias periódico.

No seu arquivo .cshrc (ou .tcshrc):

set tperiod = 60 #(or any other number.  Time in minutes between refreshing)
alias periodic 'history -S; echo "Syncing history"'

Isso executará automaticamente o comando do histórico a cada 60 minutos. Isso salvará o histórico em um arquivo de histórico comum em seu diretório pessoal. Para atualizar o histórico com mais frequência, diminua o número do período ou simplesmente execute o comando "periódico" para atualizar manualmente

    
por 03.04.2012 / 19:43
0

O Bash apenas escreve o histórico quando sai, o que torna essa problemática na melhor das hipóteses. Ouvi dizer que o zsh pode compartilhar o histórico entre as sessões ativas.

    
por 20.01.2011 / 03:23