¿Cómo evitar que Bash altere el historial?

26

Si presiono las flechas hacia arriba o hacia abajo en mi teclado y luego modifico algo de mi historial, cambiará para siempre. Incluso si presiono Ctrl-C y luego trato de volver a mostrarlo, todavía cambia: he perdido esa entrada en mi historial.

¿Cómo puedo evitar que esto suceda?

Mehrdad
fuente
3
Me encanta el título de esta pregunta. ¿Realmente puedes alterar la historia y te quejas? ¡¿Qué te pasa?!
Daniel Beck
@Daniel: Lol, sí ... quiero decir, es como si estuviera cambiando mi pasado. Claramente sin sentido, y se vuelve ridículamente molesto después de un tiempo. : \
Mehrdad
Por cierto, si usas history-search-xxx en su lugar, el comportamiento es diferente. Tal vez eso es algo para ti?
Daniel Beck
@Daniel: Eso es realmente útil, muchas gracias. Pero aún así, me gustaría saber la respuesta a esta pregunta, porque a veces los comandos no se parecen mucho entre sí, y eso no funciona.
Mehrdad
La búsqueda de historial con un mensaje vacío funciona igual que el historial regular anterior / siguiente, es decir, muestra todas las entradas.
Daniel Beck

Respuestas:

17

Desea la configuración de línea de lectura:

set revert-all-at-newline on

Puede ponerlo ~/.inputrc(vea la nota a continuación) o ponerlo bind 'revert-all-at-newline on'en su ~/.bashrc.

Manifestación:

$ man bash
$ bind 'set revert-all-at-newline on'
$ man bsh # up arrow and edit
No manual entry for bsh
$ man bash # three up arrows

Más detalles están en la página de manual de Bash :

revert-all-at-newline

Si se establece en ' on', Readline deshacerá todos los cambios en las líneas del historial antes de volver cuando se ejecute la línea de aceptación. Por defecto, las líneas del historial pueden modificarse y retener listas de deshacer individuales a través de llamadas a readline. El valor predeterminado es ' off'.


Nota:

Si ~/.inputrcse crea un nuevo archivo con el propósito de configurarlo revert-all-at-newline, tenga en cuenta que bash usará la configuración de línea de lectura en este archivo en lugar de cualquier configuración que pueda estar en el archivo /etc/inputrc. Es decir, cualquier configuración especificada en /etc/inputrcya no estará vigente. Por lo tanto, si el /etc/inputrcarchivo existe, es una buena idea comenzar ~/.inputrccon la línea:

$include /etc/inputrc

sarnold
fuente
Eres increíble, eso es exactamente lo que necesito. Ya no quiero golpear mi monitor. : D +1000000 (deseo)
Mehrdad
5

Yo entro:

ls /tmp

Maravilloso Ahora no quiero entrar

ls /temp 

y puede evitar que ingrese al historial, por lo tanto, evitar que sobrescriba ls / tmp, si inicio el comando con un espacio en blanco:

 ls /temp

Es difícil de ver, pero si lo sabes ...

Es controlado por

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

ignoredups solo ignora los comandos duplicados, ignore ambos ignora los espacios al comienzo de la línea, lo cual es útil, para ocultar contraseñas no ocultas.

Pero tal vez esté buscando una solución, donde termine con ambos comandos, el antiguo no modificado y el nuevo. Mi versión de bash o configuración se comporta así, pero no sé, qué es diferente a la tuya.

usuario desconocido
fuente
Decir ah; Siempre supuse que no guardar comandos con un espacio inicial era un error. Gracias. :)
sarnold