Como posso clonar um terminal e manter seu histórico atual?

3

Estou tentando descobrir como separar / clonar um terminal que retenha o histórico de seu pai.

Eu entendo que existem soluções que permitem que todos os terminais compartilhem um histórico, mas isso não é exatamente o que eu estou procurando.

Às vezes, estou trabalhando em um diretório e percebo que preciso de um terminal adicional - mas ainda quero ter acesso fácil ao histórico de comandos nesse terminal sem alternar para o pai dele.

Nota: Não é necessário que os dois terminais continuem a atualizar o histórico um do outro quando a criança for gerada.

Exemplo:

  • Super-longo-estranho-comando-executado-no-terminal-1
  • Precisa de um terminal adicional - o Terminal 2 entrou no jogo.
  • Depois de algum tempo, acabei lançando o nano no Terminal 1
  • Precisa de um comando super longo no Terminal 1 - mas felizmente está na história do Terminal 2!
por Ramrod 07.01.2016 / 19:35

1 resposta

3

Em poucas palavras:

Para abrir uma nova janela de terminal com o mesmo histórico completo da sessão atual, execute:

 history -a && gnome-terminal

Explicação completa:

O histórico de Bash funciona assim:

  • Você abre um terminal que inicia uma sessão de Bash.
  • O Bash carrega o histórico antigo de $HISTFILE , que normalmente é ~/.bash_history .
  • Você pode inserir comandos no shell Bash. Esses comandos serão armazenados em um histórico temporário na memória.
  • Você sai da sessão de Bash ou fecha a janela do terminal.
  • Antes de o Bash terminar, ele sincroniza o histórico temporário na memória com o que foi salvo em $HISTFILE no disco.

Observe que, tanto para o histórico temporário quanto para o histórico persistente, os limites de tamanho podem ser truncados quando ficam muito longos.

Como cada instância Bash apenas grava em um histórico temporário em sua memória, as ações de uma sessão em execução não aparecem se você iniciar uma segunda sessão em paralelo: Ele carregará a versão antiga do arquivo de histórico persistente!

Se você precisar sincronizar os históricos temporários de duas instâncias de Bash, será necessário fazer isso por meio do arquivo de histórico persistente. Existe um comando para o ajudar: history

  • Para liberar o histórico temporário da sessão do Bash atual da RAM para o $HISTFILE no disco, anexando as novas linhas de comando a ele, execute:

     history -a
    

    Este comando é automaticamente invocado sempre que você sai de uma sessão de Bash .

  • Para reler o $HISTFILE do disco e adicionar as novas linhas de comando dele ao histórico temporário da sessão do Bash atual que você pode usar, execute:

     history -r
    

    Este comando é automaticamente invocado sempre que você inicia uma sessão de Bash .

Observe o espaço inicial na frente de ambos os comandos history . Isso evita que o comando history apareça no histórico do Bash. Se você quiser que apareça lá, apenas omita o espaço no começo.

Portanto, para abrir uma nova janela de terminal que tenha acesso a todo o histórico atual, você precisa primeiro limpar o histórico temporário atual e depois abrir um novo terminal com uma nova sessão de Bash:

 history -a && gnome-terminal

Novamente, observe o espaço no início para impedir que esse comando apareça nos históricos. Se você quiser que apareça lá, omita o espaço na frente do comando.

Se você quiser um comando curto para isso, crie um alias de Bash:

echo "alias newterminal='history -a && gnome-terminal'" >> .bash_aliases

Você também pode adicionar uma entrada do menu de contexto ao ativador do Gnome-Terminal, se desejar. Peça um comentário se você precisar.

Para sincronizar os históricos de duas janelas de terminal já abertas, primeiro limpe o histórico da primeira janela e, em seguida, recarregue o arquivo de histórico na segunda janela:

  • Terminal 1 (fonte):

     history -a
    
  • Terminal 2 (alvo):

     history -r
    

Se você precisar de uma sincronização de duas vias, primeiro execute os comandos history -a em todas as janelas e, em seguida, execute o history -r em todos os lugares.

Mais informações sobre o comando history podem ser encontradas quando você executa

help history
    
por Byte Commander 07.01.2016 / 20:38