
Algo me ha estado molestando desde hace un tiempo y parece que no puedo encontrar una respuesta relevante ni en las páginas de manual ni usando su motor de búsqueda "No seas malvado".
Mi .bashrc tiene lo siguiente:
shopt -s histappend
HISTSIZE=100
HISTFILESIZE=0 # 200 previous value
Poner HISTFILESIZE en 0 me permite comenzar con un historial limpio con cada nueva ventana de términos.
Lo encuentro práctico junto con el uso de un mensaje que contiene \#
, porque al visualizar un comando anterior antes de recuperarlo con !n
o !-p
, uno puede simplemente hacer:
$ history | more
para ver su valor "n" relevante
En mi caso, suele ser el resultado de:
$ \history | tail -1 | awk '{print $1}' # (I know this is an overkill, don't flame me)
es igual al valor expandido de # en PS1 menos 1, que es como me gusta que sea en todo momento. Pero a veces no. A veces el valor ampliado de # parece "huir". Se incrementa de tal manera que se convierte en > que
$(( $(\history | tail -1 | awk '{print $1}')+1 ))
¿Alguien tiene algún consejo?
Respuesta1
La razón más probable para esto es que haya establecido HISTCONTROL
un valor que incluya ignoredupes
. Prueba ejecutando
echo $HISTCONTROL
Si eso devuelve algo como ignoredups
, significa que los comandos duplicados no se guardan en su historial. Ellossonsin embargo, contado por PS1 \#
. Esto significa que \#
felizmente se incrementará cada vez que ejecute el mismo comando dos veces, pero history
no aumentará y esto dará lugar a la discrepancia que observe.
Entonces, elimine ignoredupes
from HISTCONTROL
(esto generalmente está configurado en su ~/.profile
pero también se puede configurar en ~/.bashrc
) o use\!
en lugar de \#
en PS1
.