Saltar al contenido

¿Cómo deshacer los cambios en el historial de comandos?

Posteriormente a consultar expertos en el tema, programadores de varias ramas y profesores dimos con la respuesta al dilema y la plasmamos en esta publicación.

Solución:

Siempre que haya editado una entrada del historial pero no haya presionado Ingresar sin embargo, para volver a la entrada original, presione repetidamente control+_ – el undo comando – hasta que no haga más cambios. Has vuelto a la entrada original.

Vuelva al comando original cuando haya realizado varios cambios en la línea:

revert-line (M-r) 
    Undo all changes made to this line. This is like 
executing the undo command enough times to get back to the beginning.

M es el meta key, cual es altr para mí.


Información gratuita pero útil

Cuando usted tener ejecutado un comando como OP había hecho anteriormente (sucede), no hay nada que “deshacer” porque los comandos son manejados y recordados por la biblioteca GNU Readline y no están escritos en $HISTFILE hasta que salga el caparazón. La razón por la que menciono esto es porque no puedes simplemente grep el $HISTFILE como cabría esperar y puede que no sea ideal salir del shell.

Así que aquí hay un par de opciones para evitar que tenga que desplazarse hacia atrás a través de todos los comandos de readline anteriores.

Si recuerdas algo del comando, imprenta control+r y escriba lo que recuerda para buscar a través de comandos anteriores que contienen ese string. Prensado control+r de nuevo mostrará el siguiente más reciente, buscando hacia atrás.

Por ejemplo, escriba ls -l entonces control+r tantas veces como sea necesario para encontrar el comando anterior que busca. Si se desplaza más allá de él, control+ s buscará hacia adelante desde la posición actual.

El fc comando integrado bash Es útil enumerar los números de índice junto con los comandos readline anteriores.

fc -l -100 enumerará los 100 comandos anteriores en readline.

Además, si OP sabe que está buscando un ls -l comando, podría canalizar la salida a grep tal como: fc -l -100 | grep 'ls -l'

Esto debería generar una lista de ls -l comandos precedidos por un número de índice. La salida se ve así:
2065 ls -l

Ahora puedes usar el designador de eventos !n donde n es el número de índice. En este ejemplo, ejecutando !2065 se expandirá a ls -l.


Aunque no ayuda después del hecho, cualquiera que busque preservar el historial de comandos reciente al modificar comandos anteriores debería ver el HISTORY EXPANSION Sección de man bash. A continuación, se muestran algunos métodos alternativos para modificar comandos antiguos sin sobrescribir el historial.

El Event Designators sección muestra cómo puede editar fácilmente string desde el comando utilizado más recientemente.

^string1^string2^
              Quick  substitution.  Repeat the previous command, replacing string1 with string2.  Equivalent to
              ``!!:s/string1/string2/'' (see Modifiers below).

Ejemplo:

$ echo foo
foo 
$ ^foo^bar
echo bar
bar

Los comandos más recientes ahora mostrarán:

echo foo
echo bar

El ejemplo anterior también explica cómo usar sed para reemplazar un string en un designador de evento.

!-n    Refer to the current command minus n.

Entonces, si hay 3 comandos en el historial echo foo entonces usarías:
!-3:s/foo/bar

Tenga en cuenta que los designadores de eventos aparecerán en su historial como el comando ejecutado, en este caso echo bar. No aparecerá en la historia como !-3:s/foo/bar.

Simplemente lanzando eso, ya que parece estar estrechamente relacionado, incluso si es más un “no hacer” que la solución “deshacer” que OP está buscando.

La variable readline revert-all-at-newline, disponible desde bash-3.2, logra casi el efecto deseado.

Si está configurado, presionar enter en cualquier línea (podría ser un comando diferente, o incluso una línea vacía) revertirá las entradas del historial que fueron editadas pero no ejecutadas (como en el ejemplo de la pregunta).

Esto se puede configurar con

set revert-all-at-newline on

en ~/.inputrc.

o

bind 'set revert-all-at-newline on'

en ~/.bashrc.

valoraciones y reseñas

Si para ti ha resultado de ayuda nuestro artículo, sería de mucha ayuda si lo compartes con más desarrolladores de esta forma contrubuyes a extender nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *