¿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*
Si escribo
!123
para usar la línea de comando 123 del historial, y ahora miro el último comando en mi historial, veré enls Red*
lugar de hacerlo!123
.Si utilizo el comando de shell incorporado
fc -s Red=Blue 123
y miro el historial, veré enls 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 HISTFILE
que no contiene esta información. No me preocupa recuperar el texto original en este caso (aunque es interesante).
fuente
ls Red*
,ls Blue*
y!-2
- y luego copiar el!-2
y pegarlo en repetidas ocasiones. También es posible que desee ver un programa llamado "pantalla".Respuestas:
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
XResource
magia:Si sabe dónde están sus
XResource
correos electrónicos, puede agregar esta línea a ese archivo. Si no puede determinar eso, simplemente puede agregarecho '*cutToBeginningOfLine: False'|xrdb -merge
a 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.
fuente