Como parar a incrementação do número de comandos no comando duplicado?

3

Problema

Graças a esta questão , eu consigo proibir meu bash para estocar o mesmo comando mais de uma vez se eu escrever muitas vezes o mesmo comando.

No entanto, ainda há um detalhe que não consigo resolver: my prompt contém o caractere \# special que imprime o número do comando para cada comando. E ele ainda se incrementa a cada vez que eu insiro um comando, duplicado ou não, mesmo que a minha história não seja preenchida.

Amostra

No meu ~/.bashrc , meu prompt é assim:

export PS1='aracthor \# >'

E quando escrevo muitas vezes o mesmo comando, o incremento do número de comandos:

aracthor 1 >pwd
/home/aracthor
aracthor 2 >pwd
/home/aracthor
aracthor 3 >

Como posso evitar que o número de comando seja incrementado?

Estou usando o Ubuntu 14.04.02 e a declare -p HISTCONTROL output é:

declare -x HISTCONTROL="ignoredups:erasedups"
    
por Aracthor 23.06.2015 / 17:55

2 respostas

1

Normalmente, \! será incrementado conforme desejado, mas quando você chegar ao histórico limite HISTSIZE de linhas para manter na memória que irá parar. Você poderia tentar um muito maior HISTSIZE.

Ou, em vez disso, você poderia definir um HISTSIZE e HISTFILESIZE maiores e executar um comando antes de cada solicitação para salvar seu histórico:

PROMPT_COMMAND='history -w'

Em seguida, no seu PS1 você pode executar um comando para contar as linhas do histórico em o arquivo:

PS1='\w #=\# !=\! file=$(wc -l <$HISTFILE) $ '
    
por meuh 26.06.2015 / 13:53
1

Leia man bash , set incorporado e a seção HISTCONTROL :

       HISTCONTROL
          A colon-separated list of values controlling how commands are saved on the history list.  If the list of values includes ignorespace, lines
          which begin with a space character are not saved in the history list.  A value of ignoredups causes lines  matching  the  previous  history
          entry  to not be saved.  A value of ignoreboth is shorthand for ignorespace and ignoredups.  A value of erasedups causes all previous lines
          matching the current line to be removed from the history list before that line is saved.  Any value not in the above list is  ignored.   If
          HISTCONTROL  is  unset, or does not include a valid value, all lines read by the shell parser are saved on the history list, subject to the
          value of HISTIGNORE.  The second and subsequent lines of a multi-line compound command are not tested, and are added to the history regard‐
          less of the value of HISTCONTROL.

No meu ~/.bashrc eu tenho:

export HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredups

Aqui está um exemplo:

w3@aardvark:~(0)$ echo $HISTCONTROL
ignoreboth
w3@aardvark:~(0)$ date
Sat Jun 27 19:50:56 EDT 2015
w3@aardvark:~(0)$ date
Sat Jun 27 19:50:57 EDT 2015
w3@aardvark:~(0)$ date
Sat Jun 27 19:50:58 EDT 2015
w3@aardvark:~(0)$ history
    1  cd
    2  echo $HISTCONTROL
    3  date
    4  history
w3@aardvark:~(0)$  

As execuções de date após history serão registradas e contadas.

    
por waltinator 28.06.2015 / 01:54