¿Hay alguna forma de deshacer una modificación del historial de bash?

9

Al presionar hacia arriba, puedo pasar por los comandos ingresados ​​previamente. Sin embargo, he notado que si modifico uno de ellos, eso altera el historial. Por ejemplo, si escribo:

echo a
echo b
echo c
[up][up][backspace]d[ctrl+c]

la historia ahora muestra que el segundo comando era echo d, no echo b. ¿Cómo guardo el primero echo ben la historia?

Por ejemplo, digamos que ejecuto un comando realmente largo, con muchas opciones. luego quiero volver a ejecutarlo, con un cambio menor, así que vuelvo a través del historial para encontrarlo, hacer el cambio, pero luego me doy cuenta de que en realidad no necesito volver a ejecutarlo, solo pensé en otra opción hacer en su lugar. luego, quiero volver y recordarme cuál fue el comando que ejecuté, pero espera, ¡el historial ahora muestra lo incorrecto!

Esto ocurre muy raramente, pero cuando lo hace, me resulta realmente irritante. ¿Hay alguna forma de preservar automáticamente la historia original?

Benubird
fuente
1
con historyusted puede ver todo el comando. Después de que pueda seleccionar lo que necesita. ¿Qué caparazón estás usando ahora?
Hastur
66
No puedo reproducir eso. Si cambio c a d, presione CTRL + C y presione [arriba] nuevamente, todavía dice echo c.
Martin von Wittich

Respuestas:

6

Intenta poner en tu ~/.inputrc

 set revert-all-at-newline on

En algunos casos, puede encontrarlo en el valor predeterminado (Desactivado).
Debe forzar readlinea deshacer todos los cambios en las líneas del historial antes de volver cuando accept-linese ejecute. (más información en man bash).

Editar:
CTRL+c y set revert-all-at-newline onfunciona bien desde entonces bash-4.3.30.

# GNU bash, version 4.3.30(1)-release
# Emacs-mode

echo c
[up][backspace]d[Ctrl+c][up] # you should see echo c

Pero:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d
Hastur
fuente
Bien, esta es la mejor solución. Curiosamente, CTRL-c en realidad hará que recuerde el valor modificado, aunque borrando completamente la línea o la flecha hacia abajo y luego presionando enter o ejecutando otro comando restaurará el historial.
Dean Serenevy
@DeanSerenevy: Gracias, también me gusta su solución y empiezo a usar CTRL-a nanotambién :-)
Hastur
4

Generalmente:

CTRL-a # ENTER

lo haré.

El comando original será recordado si ejecuta el comando modificado. Por supuesto, no desea ejecutar realmente, por lo que puede comentar la línea con #.

En su ejemplo, entonces tendría en su historia: echo a, echo b, echo c, # echo d.

Dean Serenevy
fuente
1
Puede presionar alt-shift-3para comentar la línea de comando actual si su bash está usando readline. /insert-commenten man 3 readline(o man bash) para más información.
cychoi