Como fazer com que o bash (Terminal.app) se lembre do histórico das sessões anteriores?


11

No meu computador no trabalho, meu shell bash se lembra do histórico das sessões anteriores, mesmo que eu tenha acabado de abrir um novo terminal.
No meu computador em casa, isso não acontece.
Eu tenho o mesmo sistema operacional 10.6.8 em ambas as máquinas e não tenho nenhuma configuração relacionada ao histórico .bash_profile.
Como posso configurar isso no meu computador doméstico para que ele se lembre do histórico das sessões?



Respostas:


11

Você precisará informar ao bash onde manter seu arquivo de histórico e quantas linhas manter:

# Set the location of your HISTFILE
echo "export HISTFILE=/Users/<USERNAME>/.bash_history" >> ~/.bash_profile

# Number of lines to keep (1000 in this example)
echo "export HISTFILESIZE=1000" >> ~/.bash_profile

# Set how many commands to keep in the current session history list
echo "export HISTSIZE=80" >> ~/.bash_profile

# Ignore commands that start with a space
echo "export HISTIGNORE=\"&:[ ]*:exit\"" >> ~/.bash_profile

3
Tudo isso deve ser desnecessário por padrão. A configuração padrão do bash (pelo menos no Mac OS X) ativa o histórico de comandos.
Chris Page

Palavra-chave, / deveria /. Se o histórico dele não estiver gravando, isso forçará o bash a manter o histórico no init.
Aaron Lake

2
Não apenas deveria , mas sim , a menos que algo tenha sido feito para suprimir o comportamento padrão do histórico; nesse caso, apenas inserir alguns valores nessas variáveis ​​é apenas encobrir o problema real. Se esta resposta resolver o problema, outra coisa está realmente complicada e deve ser corrigida para evitar outros problemas.
Chris Página

Você pode definir essas configurações, mas encontrei uma solução / resposta mais simples se você quiser "ativar" o histórico no terminal. Ele só funcionou bem para mim apple.stackexchange.com/a/220667/243988 (estou usando MacOS High Sierra)
jpruizs

4

Acabei de descobrir que tinha um problema semelhante, embora meu empregador tenha apenas dois Macs e nenhum deles esteja sentado na minha mesa. Inaceitável, mas uma batalha por outro tempo.

De qualquer forma, em casa, o Mac Mini (migrado do MacBook Pro) não cooperou mesmo após a configuração .bashrce / ou .profile. Então eu descobri que meu ~/.bash_historyarquivo era misteriosamente pertencente à raiz. Tinha que fazer isso:

sudo -iu root
cd ~(myusername)
chown (myusername) .bash_history

(Sim, eu sei que isso pode ser feito em menos comandos. Hábito.)

Então saí do Terminal e iniciei um novo. Woot! Todo o tipo de história anteriormente perdida voltou rapidamente. Que legal.

A probabilidade de alguém lendo isso se colocar acidentalmente nessa situação: 0,2%. Tenho certeza de que estraguei tudo ao exagerar em "consertar" outra coisa.


4

Eu tive esse problema e o que funcionou para mim foi criar um arquivo chamado .bash_sessions_disablena minha pasta de usuário ( ~/).

Basicamente, o OS X cria arquivos de histórico na .bash_sessionspasta para cada sessão (no meu caso, um para cada guia). E mesmo fechando adequadamente essas sessões, o OS X não reproduz o histórico para .bash_history.

Criando .bash_sessions_disablevocê desabilitar esse comportamento.

touch ~/.bash_sessions_disable

Desabilitar o histórico de comandos por sessão - o comportamento padrão - é o oposto do que está sendo solicitado.
Chris Page

@ChrisPage Isso é correto apenas se o interlocutor estiver perguntando sobre os históricos por sessão, o que não parece ser o caso ("lembre-se do histórico entre as sessões"). Desativar o comportamento da sessão do bash HABILITA a reprodução de um único histórico em .bash_historyvez de mantê-lo na .bash_sessions/pasta. Esta é a resposta correta imho.
Matt H

@MattH A pergunta pergunta como fazer com que o histórico volte a funcionar, porque parece não estar funcionando, e desabilitar esse recurso de histórico por sessão não está indo na direção certa. Se houver um erro no mecanismo do histórico por sessão, alguém deverá registrar um relatório de erro, mas apresentar uma resposta como se a desativação fosse de alguma forma geralmente correta para todos os usuários está ... incorreta. Normalmente funciona muito bem. Veja meus comentários sobre as várias respostas para obter mais informações.
Chris Page

Eu também deveria ter mencionado isso quando comentei inicialmente: desabilitar todo o mecanismo de salvar / restaurar o bash é um último recurso e deve ser evitado, se possível. Você pode simplesmente desativar o comportamento histórico de comandos por sessão por definição SHELL_SESSION_HISTORYa 0, conforme documentado no /etc/bashrc_Apple_Terminal.
Chris Página

1

Esta resposta deste tópico do Reddit me salvou:

Provavelmente o RVM está impedindo a saída "hook" para que o bash_sessions seja executado. Se você comentar a seguinte linha no seu .bash_profile, ela deverá funcionar.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

0

Eu também tive um problema semelhante, sem histórico registrado. As soluções fornecidas não funcionaram, mas finalmente descobri que o problema era tão simples quanto um arquivo .bash_history ausente

A solução foi acessar /home/[username]/e adicionar um arquivo .bash_history, para

nano .bash_history

e digite qualquer coisa no arquivo (caso contrário, ele não será criado), saia e salve. Depois disso, a história começou a funcionar normalmente.


Se isso resolver o problema, algo mais está errado e deve ser corrigido para evitar outros problemas. Se você iniciar o Bash quando não houver um arquivo de histórico, ele criará um. Se ele não tentar criar um, ou não conseguir criá-lo, há algo errado com algum script de inicialização do shell ou com as permissões do diretório inicial. Por exemplo, consulte a resposta: apple.stackexchange.com/a/118764/6883
Chris Page
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.