Como faço para que o Terminal mantenha um histórico separado por guia / janela?


13

Quando eu reinicio o meu Mac, ele fecha e salva os buffers de cada guia corretamente, pois está lá novamente quando o computador é reiniciado. Mas o histórico do comando não é armazenado em buffer adequadamente por janela / guia. Eles são todos iguais.

Estou assumindo que é porque o bash usa o mesmo ~/.bash_historypara todos os terminais, mas existe uma maneira de evitar isso? Para fazer o bash, ou talvez o Terminal, armazene-os separadamente?


Por favor, veja este post @ Server Fault, explica como fazer isso.
Mutant

Respostas:


7

Você poderia fazer algo assim no seu .bashrc:

MYTTY=`tty`
HISTFILE=$HOME/.bash_history_`basename $MYTTY`

Isso criará arquivos de histórico separados em seu diretório pessoal, como .bash_history_ttys002. Quando você cria uma nova janela do terminal, ele usa o arquivo de histórico correspondente ao nome do tty, que geralmente será determinado simplesmente pela ordem em que você criou as janelas do terminal.


Ótimo, obrigado! Marcando isso como resolvido. Mesmo que isso dependa de como o OSX carrega os terminais, sinto que este é o mais próximo que podemos chegar.
Robert Sköld

Isso também é possível por guia?
Joshua Muheim

Cada guia é um login tty separado, portanto deve funcionar.
Seth Noble

O terminal possui suporte explícito para esse tipo de comportamento: quando cria um novo terminal, atribui ao terminal um ID exclusivo e o comunica à sessão do terminal por meio da variável de ambiente TERM_SESSION_ID. Quando restaura um terminal para Reiniciar, também restaura o mesmo ID da sessão, para que os programas possam usá-lo para associar o estado arbitrário aos terminais restaurados. Use isso como parte do nome do arquivo em vez do tty.
18715 Chris Página

@ Chrishrage, o problema é que a sessão é diferente cada vez que você abre uma janela / guia. Portanto, criaria histórias separadas e não as vincularia entre as sessões.
Rene Wooller

5

Eu implementei isso adicionando

export HISTFILE="$HOME/.bash_history_$TERM_SESSION_ID"
if [ ! -e $HISTFILE ]; then cp "$HOME/.bash_history" "$HISTFILE"; fi

para o meu ~/.bash_profilearquivo. Agora, quando fecho o terminal e o abro novamente, cada guia tem seu histórico de comandos separado restaurado. Além disso, quando eu crio uma nova guia, o histórico padrão é inicializado em.bash_history

Além disso, para criar um Terminalaplicativo para preservar as guias abertas entre sair e reiniciar, você precisa ter certeza de que a opção "close windows when quitting app" (on Yosemite)está desativada System Preferences -> General.


0

Você pode definir um $ HISTFILE personalizado para cada uma das instâncias do Terminal.


Existe uma maneira de fazer isso automaticamente para cada guia / janela do Terminal? E verifique se está usando o mesmo $HISTFILEquando o computador é reiniciado?
Robert Sköld

1
Sim, é possível fazer isso, mas como você acessaria novamente? Você precisaria manualmente manipular arquivos para acessar os arquivos de histórico anteriores.
EmmEff

O @EmmEff Terminal possui suporte explícito para esse tipo de comportamento: quando cria um novo terminal, atribui ao terminal um ID exclusivo e o comunica à sessão do terminal por meio da variável de ambiente TERM_SESSION_ID. Quando restaura um terminal para Reiniciar, também restaura o mesmo ID da sessão, para que os programas possam usá-lo para associar o estado arbitrário aos terminais restaurados.
31515 Chris Página
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.