¿De dónde viene la discrepancia entre \# en PS1 y n en !n?

¿De dónde viene la discrepancia entre \# en PS1 y n en !n?

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 !no !-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 HISTCONTROLun 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 historyno aumentará y esto dará lugar a la discrepancia que observe.

Entonces, elimine ignoredupesfrom HISTCONTROL(esto generalmente está configurado en su ~/.profilepero también se puede configurar en ~/.bashrc) o use\!en lugar de \#en PS1.

información relacionada