Por que o histórico do bash no meu mac não salva?

28

Eu sempre usei o bash no trabalho e nunca tive problemas com ele. Agora, ele não salva nenhum comando no histórico novamente. Se eu abrir um terminal da janela, tente alguns comandos, ele funcionará como se tudo tivesse funcionado bem e me mostrará o histórico usando as teclas de seta. Mas se eu fechar a janela (e que é a hora que deveria ser salva no arquivo .bash_history) e abrir outra, não há sinais dos últimos comandos.

Como posso descobrir o que está errado? Ou redefina tudo do espaço em branco.

abaini01
fonte
Pode ser o seu perfil ou arquivo rc. O que há neles?
usar o seguinte comando
1
Quais são as permissões e o proprietário no seu .bash_history? Os meus são 600 e pertencem a mim. Além disso, o que há em $ HIST_FILE?
blm
As permissões do @blm estão corretas; imprimindo o $ HIST_FILE que descobri sobre .bash_sessions . Aparentemente, existem problemas quando, no final de uma sessão, o sistema operacional salva esses arquivos no arquivo de histórico. Eu não quero para investigar mais, então eu simplesmente colocar isso em minha casa .bash_sessions_disablee sei que retornar ao comportamento padrão
abaini01
Por favor considere arquivar um relatório de bug com a Apple: developer.apple.com/bug-reporting
Chris Página

Respostas:

31

Eu fiz isso:

Adicione uma variável ao .bash_profilearquivo

SHELL_SESSION_HISTORY=0

reinicie o terminal e depois ele está funcionando como eu gostaria. (Ele salvou os comandos depois que fechei o terminal)

PS Eu também uso o HISTFILESIZEe HISTSIZEvariáveis

HISTSIZE é o número de linhas ou comandos armazenados na memória em uma lista de histórico enquanto a sessão do bash está em andamento.

HISTFILESIZE é o número de linhas ou comandos que (a) são permitidos no arquivo de histórico no momento da inicialização de uma sessão e (b) são armazenados no arquivo de histórico no final de sua sessão do bash para uso em sessões futuras.

Sysqa
fonte
3
Acrescentando que uma linha funciona bem para mim no El Capitan, obrigado.
Aidan
2
Obrigado! Gostaria muito de saber por que isso funciona também, se alguém souber. (História = 0 implicaria à minha mente ignorante que toda a história será perdido, no entanto, parece ter o efeito oposto.)
Mike Williamson
@ Sysqa Existe alguma solução "no meio"? O recurso que "salva e restaura o histórico do comando bash de forma independente para cada sessão de terminal restaurada" parece um recurso interessante do qual alguns programas podem se beneficiar. Existe alguma maneira de obter os benefícios da configuração anterior e também a nova com algum tipo de configuração?
Loco.loop 13/10
8

Iniciando no OS X 10.11 El Capitan , o script instalado pelo sistema /etc/bashrc_Apple_Terminalcoordena-se com o Terminal para salvar / restaurar históricos de comandos separados para cada terminal restaurado para Continuar .

Leia os comentários /etc/bashrc_Apple_Terminalpara obter uma explicação de como ele gerencia os históricos de comando por terminal e como personalizá-lo.

Se você personalizar, PROMPT_COMMANDcertifique-se de concatenar com o valor anterior para não apagar o comando fornecido pelo sistema:

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

Se você instalar um EXITmanipulador de sinal, trapcertifique-se de fazer algo semelhante (ou chame shell_session_update do manipulador, se não conseguir descobrir como concatenar com o valor anterior - é um pouco complicado).

Quando você sai do shell, esse código salva novos comandos no histórico do terminal ~/.bash_sessions. Para verificar se há algum problema, em vez de fechar o terminal, saia manualmente do shell com exit(ou Control-D). Ele registra mensagens de progresso. Observe se não está completo ou se algum tipo de aviso ou mensagem de erro é exibido.

Em geral, bashrc_Apple_Terminaltenta detectar e desativar o histórico por sessão, se parecer que o usuário executou personalizações incompatíveis com ele. Parece que você encontrou um que não lida. Considere arquivar um relatório de bug com a Apple: https://developer.apple.com/bug-reporting/

Chris Page
fonte
Eu não fiz nenhuma configuração especial, então acho que não é o problema. Você poderia explicar o que o PROMPT_COMMAND faz.
Loco.loop 13/10/19
@ loco.loop Você quer dizer “O que é a variável PROMPT_COMMAND do Bash?” ou você quer dizer “O que /etc/bashrc_Apple_Terminalusa PROMPT_COMMAND?”? Neste último caso, refiro-lhe o código, que está documentado em detalhes. Ou você deve iniciar outra sessão de perguntas e respostas sobre isso.
Chris Página
Quero dizer o que PROMPT_COMMAND para ... @ChrisPage
loco.loop
@ loco.loop Consulte a documentação do Bash ou sugiro que você inicie uma sessão de perguntas e respostas sobre isso.
Chris Página
6

Apenas no caso de haver outras pessoas lá fora que têm RVM (Rubi Versão Manager) instalado: Verifique se você tem a seguinte linha no seu ~/.profile, ~/.bashrcou ~/.bash_profilearquivos.

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

Provavelmente o RVM está impedindo a saída "hook" para que o bash_sessions seja executado.

Esse foi o problema para mim. Tente comentar.

Fonte: Reddit

Nate
fonte
3

Em uma nova instalação do Mac OS X (atualizada para 10.13.6), o histórico do comando bash não estava sendo salvo. Também não havia arquivos .bashrc ou .bash_profile. Nesse caso, basta adicionar um arquivo .bashrc vazio para mim.

touch .bashrc

Parece ser tudo o que você precisa ...

Vesal
fonte
parece corrigir o problema no Mojave / 10.14 também :-)
ssc 09/02
3

Eu tive o mesmo problema com um Mojave osx recém-instalado. Eu verifiquei meu ~/.bash_historyarquivo e vi o seguinte:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

Simplesmente devolvê-lo à Gilm resolveu o problema. Eu usei:

sudo chown gilm /Users/gilm/.bash_history

e isso resolveu meu problema.

gilm
fonte
2

Você também pode criar um .bash_logoutarquivo com o seguinte:

shell_session_update

Origem do comentário do GitHub

Caçador
fonte
Ou, digite manualmente trap shell_session_update EXITuma vez e faça logout. Existem dicas no /etc/bashrc_Apple_Terminalscript que são muito chatas para incluir aqui.
MarkHu