¿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?


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

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.