Posso pesquisar facilmente meu histórico em várias janelas da tela?


11

Minha screensessão atual tem 12 janelas abertas. Está em execução há semanas ... sei que executei um convertcomando do ImageMagick em uma dessas 12 janelas da tela na semana passada ... existe alguma maneira de pesquisar facilmente o histórico do Bash de todas as 12 instâncias, sem fechá-las ou em execução history | grep convertem todas as 12 telas?


1
Eu uso Zsh e eu tenho setopt share_historyno /etc/zsh/zshrcmodo que este problema nunca deve acontecer para mim: P
phunehehe

Respostas:


18

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

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

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

2
Isso é ótimo, obrigado! O único problema é que, se você digitar algo em um shell e depois for para outro e digitar o histórico imediatamente, ele não aparecerá no histórico. Isso ocorre porque o PROMPT_COMMAND ainda não foi executado, portanto, a atualização não ocorreu. Você precisará pressionar return na segunda janela (ou executar outro comando) primeiro e depois digitar history.
11557 Javascript:

1

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

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

lastcomm convert

Se isso não estiver disponível ou não for conclusivo, você poderá executar um historycomando em cada instância do bash para procurar por convertcomandos. Isso 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 das janelas da tela. Certifique-se de ignorar as janelas que não estão atualmente em execução no bash, mas algum outro processo que interpreta a entrada de maneira 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.historyconterá uma lista de linhas como 3 convert foo.jpg, se você executou convert foo.jpgna janela 3.

1
Infelizmente estes não funcionaram. :-( Eu só acabei correndo history | grep convert. Em todas as janelas estou desapontado, eu queria aceitar outro grande resposta por Gilles!
Josh

1

O tcsh permite compartilhar 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 history 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


0

O Bash só escreve a história quando sai, o que torna isso problemático na melhor das hipóteses. Ouvi dizer que o zsh pode compartilhar histórico entre sessões ativas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.