de onde vem a discrepância entre \ # em PS1 e n in! n?

1

Algo me atormenta há algum tempo e parece que não consigo encontrar uma resposta relevante em man pages ou usando o mecanismo de busca 'Não seja malvado'.

Meu .bashrc tem o seguinte:

shopt -s histappend
HISTSIZE=100
HISTFILESIZE=0   # 200 previous value

Colocar HISTFILESIZE em 0 permite que eu comece com um histórico limpo em cada nova janela de termos.

Eu acho prático em conjunto com o uso de um prompt que contém \# , porque ao visualizar um comando anterior antes de recuperá-lo com !n ou !-p , pode-se apenas fazer:

$ history | more 

para ver o valor "n" relevante

No meu caso, geralmente o resultado de:

$ \history | tail -1 | awk '{print $1}'   # (I know this is an overkill, don't flame me)

é igual ao valor expandido de # no PS1 menos 1, que é como eu gosto que seja o tempo todo. Mas então, às vezes não. Às vezes, o valor expandido de # tipo de "foge". É incrementado de tal maneira que se torna > que

$(( $(\history | tail -1 | awk '{print $1}')+1 ))

Algum apontador, alguém?

    
por Cbhihe 13.06.2014 / 12:04

1 resposta

0

A razão mais provável para isso é que você definiu HISTCONTROL para um valor que inclua ignoredupes . Teste executando

echo $HISTCONTROL

Se isso retornar algo como ignoredups , isso significa que os comandos duplicados não são salvos no seu histórico. Eles são contados pelo \# do PS1. Isso significa que \# será incrementado com prazer toda vez que você executar o mesmo comando duas vezes, mas seu history não aumentará e isso levará à discrepância que você observar.

Então, remova o ignoredupes de HISTCONTROL (isso geralmente é definido em seu ~/.profile , mas também pode ser definido em ~/.bashrc ) ou use \! em vez de \# em PS1 .

    
por terdon 13.06.2014 / 15:34