Ver comandos reales escritos en el historial de bash

0

¿Es posible recuperar los comandos reales escritos en un historial de bash? Si el comando involucró (por ejemplo) una sustitución o modificador del historial, lo que se ve en el historial es el comando resultante en lugar del comando escrito.

Un par de ejemplos Para ambos, suponga que el comando 123 en la historia esls Red*

  1. Si escribo !123para usar la línea de comando 123 del historial, y ahora miro el último comando en mi historial, veré en ls Red*lugar de hacerlo !123.

  2. Si utilizo el comando de shell incorporado fc -s Red=Blue 123y miro el historial, veré en ls Blue*lugar defc -s Red=Blue 123

De manera similar, si uso la flecha hacia arriba (produciendo la secuencia de escape ^[[A) obtengo el comando expandido en lugar del texto escrito real.

En todos estos ejemplos, la entrada resultante en el historial es lo que espero, pero en algunos casos sería útil recuperar el texto escrito originalmente. Por ejemplo, si bien los ejemplos anteriores son bastante simples, podría estar usando una sustitución compleja que quiero editar.

Me doy cuenta de que esto sería aún más complicado después de que el shell se inicialice, ya HISTFILEque no contiene esta información. No me preocupa recuperar el texto original en este caso (aunque es interesante).

borrible
fuente
Esta no es una respuesta real a su pregunta, pero si está en un terminal que permite copiar y pegar (y todavía está conectado; es decir, no está tratando de recuperar las pulsaciones de teclas que escribió la semana pasada), a menudo es beneficioso copiar y pegar viejos comandos. Por ejemplo, si quiero repetidas ocasiones se alternan entre dos comandos, podría escribir ls Red*, ls Blue*y !-2- y luego copiar el !-2y pegarlo en repetidas ocasiones. También es posible que desee ver un programa llamado "pantalla".
Scott

Respuestas:

1

La respuesta real a la pregunta que hizo es "No, bash no tiene una función como esa". Fue algo en lo que pensé hace una década cuando estaba trabajando en el mismo edificio que el equipo central de GNU, así que fui y hablé con ellos y, aparentemente, agregué que esto sería una PITA (incluida la descifración de la sintaxis y el almacenamiento de todo esa historia extra). Muchas personas se beneficiarían ocasionalmente, pero había muchos problemas más importantes que abordar, por lo que era poco probable que se solucionaran.

Por otro lado, a menudo he descubierto que el uso de las funciones de cortar y pegar de X11 puede satisfacer mis necesidades reales en casi todos los casos. Se hizo aún mejor con el descubrimiento de la siguiente XResourcemagia:

*cutToBeginningOfLine:      False

Si sabe dónde están sus XResourcecorreos electrónicos, puede agregar esta línea a ese archivo. Si no puede determinar eso, simplemente puede agregar echo '*cutToBeginningOfLine: False'|xrdb -mergea uno de sus archivos de inicio (por ejemplo .profile, pero depende de su shell).

Lo que esto hace es hacer triple clic en el botón izquierdo del mouse, copiar la palabra que está señalando al final de la línea (incluida la Enter) y luego puede pegarla fácilmente. Por defecto (es decir, sin esto), el triple clic copia toda la línea, incluida la solicitud.

MAPA
fuente
Interesante historia, gracias. ¿Sabes si la característica existe en alguno de los otros shells comunes?
borrible
No, soy estrictamente una persona violenta. Habiendo conocido personalmente a los primeros desarrolladores de bash, podría tener algo que ver con eso.
MAPA