Número do histórico de bash não começando em 1?

7

Eu estava personalizando meu prompt bash (estou no OS X 10.7) quando me deparei com algo estranho. Dentro do meu prompt eu incluí !, o que deve me dar o número do histórico. No entanto, o número do histórico sempre começa em 501, em vez de 1. Isso é verdade mesmo se eu reiniciar o Terminal.

Eu não consigo encontrar nada parecido com isso, eu queria saber se vocês poderiam oferecer algumas dicas.

    
por itsachen 06.08.2011 / 03:24

3 respostas

7

Do homem bash:

   On startup, the history is initialized from the file named by the vari‐
   able HISTFILE (default ~/.bash_history).  The file named by  the  value
   of  HISTFILE  is  truncated,  if necessary, to contain no more than the
   number of lines specified by the value of HISTFILESIZE. [...] When an 
   interactive  shell  exits, the last $HISTSIZE lines are copied from the
   history list to $HISTFILE.

Enquanto esse texto é bem claro, vamos brincar um pouco pelo exemplo (este é um sistema deb, mas bash é bash).

Meu status de histórico agora:

~$ set | grep HIST
HISTCONTROL=ignoredups:ignorespace
HISTFILE=/home/hmontoliu/.bash_history
HISTFILESIZE=2000
HISTSIZE=1000

Como HISTFILESIZE é 2000 e HISTSIZE é 1000, apenas as últimas 1000 linhas do HISTFILE estão disponíveis, então você pode ter a impressão errada de que meu histórico começa em 1000.

~$ history | head -1
 1000  if i=1; then echo $i; done

~$ history | wc -l
1000

Mas, de fato, o HISTFILE armazena os últimos 2000 comandos:

 ~$ wc -l $HISTFILE
2000 /home/hmontoliu/.bash_history

Se você acha que é chato, você pode igualar o HISTSIZE e o HISTFILESIZE

~$ echo "export HISTSIZE=$HISTFILESIZE" >> .bashrc
~$ bash -l
~$ history | head -1
    1  ls
~$ history | wc -l
2000
~$ set | grep HIST
HISTCONTROL=ignoredups:ignorespace
HISTFILE=/home/hmontoliu/.bash_history
HISTFILESIZE=2000
HISTSIZE=2000

Uma dica final: você deve executar help history para ver as ações que você pode fazer com sua história

    
por 06.08.2011 / 08:29
4

A resposta de hmontoliu é muito bom, esta é apenas uma versão TL; DR.

O histórico do bash sempre começa de onde você parou. Ele mantém um histórico semi-permanente de comandos executados em um arquivo em seu diretório pessoal. Toda vez que você inicia um shell bash, ele carrega esse arquivo de histórico e você pode rolar até comandos executados em sessões anteriores. Se você tivesse 274 comandos anteriores no histórico, seu número de histórico de comandos em um novo shell começaria com 275.

O arquivo de histórico é truncado para um tamanho máximo especificado pela variável de ambiente $HISTFILESIZE . Você aparentemente truncou seu arquivo de histórico para um máximo de 500 linhas, portanto, cada novo shell inicia em 501. Os itens do histórico anterior são uma coleção dos últimos 500 itens de shells anteriores.

    
por 06.08.2011 / 10:59
0

O histórico é salvo, por padrão, ~/.bash_history . O histórico do shell interativo é salvo no arquivo quando sai, dependendo das configurações no shell. Leia a manpage do bash (1) e procure por 'history'.

    
por 06.08.2011 / 03:44