Por que o bash padrão parece não ter alguns dos comandos que usei na história, mas tem outros?

Por que o bash padrão parece não ter alguns dos comandos que usei na história, mas tem outros?

Em um Mac, Serra.

Não tenho HISTconfigurações relacionadas que eu possa ver:

~ @ Magni (jcollum) 
$ env|grep HIST

~ @ Magni (jcollum) 
$ cat ~/.bash_profile | grep HIST

~ @ Magni (jcollum) 

Mas tenho coisas na minha história que fiz ontem que não existem depois de reiniciar. Realmente duvido muito que coloquei espaços antes do comando toda vez que fiz isso.

Eu sei que há posts aqui que me dizem como consertar isso, mas eu gostaria de saberpor queisso acontece desta forma.

Por exemplo, quando eu uso um curlque executei ontem, nada:

~ @ Magni (jcollum) 
$ history | grep curl 
166  curl -X POST -d [email protected] -d password=********** http://localhost:3000/login
503  hg curl 
519  history | grep curl 

400 comandos atrás? Eu sei que usei curluma dúzia de vezes na semana passada, mas (e não uso o bash o suficiente para executar centenas de comandos esta semana).

Basicamente, estou perplexo e não sei por que está faltando tanto do que fiz. É possível que o histórico esteja sendo registrado apenas em uma instância do bash?

Responder1

É possível que o histórico esteja sendo registrado apenas em uma instância do bash?

É isso que está acontecendo. A maneira como o histórico funciona no bash, a menos que você tenha se esforçado para alterá-lo, é:

  • Quando o bash é iniciado, ele carrega o histórico salvo do arquivo de histórico.
  • Cada vez que um comando é executado, ele é adicionado ao histórico na memória do bash.
  • Quando o bash sai, ele salva o histórico acumulado no arquivo de histórico.

Agora suponha que você inicie duas instâncias do bash. Ambos carregam o arquivo de histórico quando são iniciados. Ambos adicionam os comandos que executam ao seu próprio histórico. Quando uma instância é encerrada, ela salva o histórico antigo e seus próprios comandos no arquivo de histórico. Quando a segunda instância sai, ela salva o histórico antigo maisisso épróprio comando para o arquivo de histórico - e ao fazer isso, ele limpa o histórico da primeira instância que saiu.

O mecanismo de salvamento de histórico do Bash é excessivamente simplista. Suas linhas de histórico estão à mercê de todas as outras instâncias em execução - a última saída apaga o histórico das outras. As soluções incluem anexar o novo histórico ao arquivo de histórico em vez de substituir o arquivo de histórico por todo o histórico da memória ou anexar linhas ao arquivo de histórico assim que forem executadas. VerPreservar o histórico do bash em várias janelas de terminalePreservar o histórico do bash em várias janelas de terminalpara algumas maneiras de implementar esta e outras variantes.

A solução mais simples é executar o zsh, que salva o histórico de maneira sensata por padrão. Eu recomendo isso, especialmente porque você está executando o macOS que está preso em uma versão antiga do bash porque a Apple não gosta da licença das versões lançadas desde 2009.

informação relacionada