Metade da história do bash está faltando

3

Na outra noite eu estava lendo AU Q & amp; A e usei um comando bash:

inxi -????

O problema é que hoje não me lembro de personagens que contenham ???? Eu quero colocar o comando e os parâmetros na minha planilha de documentação. Com base nessa resposta ( Como relembrar o histórico no teminal ) Eu usei este comando:

$ cat .bash_history | grep inxi
inxi -b
sudo apt install inxi
inxi -b

No entanto, o comando que eu quero não está lá, embora a história seja muito antiga. Eu usei os comandos inxi muitas vezes no terminal desde aquele antigo histórico, mas nenhum deles está aparecendo.

Eu também tentei Ctrl + R + inxi sem qualquer sorte. Porque eu abro janelas de múltiplos terminais o tempo todo é história ligada a uma janela específica?

Existe uma maneira diferente de grep bash arquivo (s) de histórico?

Note que eu não prefixo os comandos do terminal com uma barra de espaço tal que eles sejam suprimidos do histórico.

    
por WinEunuuchs2Unix 20.02.2017 / 23:49

2 respostas

3

Não sei o que aconteceu sem ter acesso à sua máquina, mas aqui está uma breve explicação de como o sistema de histórico funciona, o que pode ajudá-lo a descobrir o que aconteceu.

Cada terminal aberto possui seu próprio buffer de histórico. Esses buffers são anexados ao seu $HISTFILE quando o terminal é fechado (talvez também sempre que o buffer é preenchido, mas eu não sei com que freqüência isso acontece). Agora, a maneira de procurar um comando no seu histórico é simplesmente executar:

history | grep command

Mas se o comando foi executado em um shell diferente, você não o verá no histórico do seu atual. Para consertar isso, você fecha todos os shells abertos, abre uma nova janela de terminal e pesquisa seu histórico novamente.

Se isso ainda não ajudar, provavelmente você ultrapassou o limite de comandos armazenados no $HISTFILE . O comportamento do $HISTFILE é controlado por várias variáveis de ambiente (veja man bash para a lista completa), mas as relevantes aqui são:

   HISTSIZE
          The  number  of commands to remember in the command history (see HISTORY below).  If the value is 0, commands are not saved in the history list.  Numeric values less than
          zero result in every command being saved on the history list (there is no limit).  The shell sets the default value to 500 after reading any startup files.

   HISTFILESIZE
          The maximum number of lines contained in the history file.  When this variable is assigned a value, the history file is truncated, if necessary, to contain no  more  than
          that number of lines by removing the oldest entries.  The history file is also truncated to this size after writing it when a shell exits.  If the value is 0, the history
          file is truncated to zero size.  Non-numeric values and numeric values less than zero inhibit truncation.  The shell sets the default value to the value of HISTSIZE after
          reading any startup files.

Quanto mais altos valores você definir, mais comandos você manterá em $HISTFILE . Por exemplo, eu uso:

HISTSIZE=999999
HISTFILESIZE=999999

Se você quiser importar o histórico de um shell para outro, use o comando history :

$ help history | grep -E -- '-a|-r'
      -a    append history lines from this session to the history file
      -r    read the history file and append the contents to the history

Portanto, execute history -a para gravar o histórico de um terminal e, em seguida, history -w para lê-lo do outro. Agora, executar history mostrará o histórico das duas conchas.

Por fim, você pode fazer com que todos os seus terminais compartilhem o mesmo histórico adicionando essas linhas ao seu ~/.bashrc :

## history -a causes the last command to be written to the
## history file automatically and history -r imports the history
export PROMPT_COMMAND='history -a;history -r'

Eu também sugiro que você adicione isto:

## Make Bash append rather than overwrite the history on disk:
shopt -s histappend
    
por terdon 21.02.2017 / 01:59
2

Seu comando funcionou para mim ...

$ cat .bash_history | grep inxi
inxi -b
sudo apt install inxi
inxi -b
inxi -Fxz -c 0 > inxi_list.txt
inxi -Fxz
inxi -Fxz
sudo inxi -Fxz

Eu também copio periodicamente o histórico para um arquivo e o salvo.

history > history_$(date '+%Y-%m-%d_%H:%M:%S')_$(hostname).txt
    
por oldfred 21.02.2017 / 00:06