bash – ¿Cómo puedo guardar el último comando en un archivo?

Pregunta:

Cuando ejecuto mis análisis usando el shell bash, a menudo quiero guardar los comandos que he usado que me dieron buenos resultados en un archivo en el mismo directorio (mi "LOGBOOK", como se llama) para poder verificar qué Lo hice para obtener esos resultados. Hasta ahora esto me ha significado copiar, pasar el comando desde la terminal o presionar "arriba" modificando el comando a un echo"my command" >> LOGBOOK , u otras payasadas similares.

Descubrí que había una herramienta de history el otro día, pero no puedo encontrar una manera de usarla para obtener el comando ejecutado previamente para poder hacer algo como getlast >> LOGBOOK .

¿Existe una manera fácil y agradable de hacer esto? Alternativamente, ¿cómo lidian los demás con guardar los comandos para los resultados que tienen?

Respuesta:

Si está usando bash , puede usar el comando fc para mostrar su historial de la manera que desee:

fc -ln -1

Eso imprimirá su último comando. -l significa lista, -n significa no prefijar líneas con números de comando y -1 dice mostrar solo el último comando. Si el espacio en blanco al principio de la línea (solo la primera línea en los comandos multilínea) es molesto, puede deshacerse de eso fácilmente con sed . getlast >> LOGBOOK en una función de shell y tendrá la solución solicitada ( getlast >> LOGBOOK ):

getlast() {
    fc -ln "$1" "$1" | sed '1s/^[[:space:]]*//'
}

Eso debería funcionar como lo ha pedido en su pregunta.

He agregado una ligera variación agregando "$1" "$1" al comando fc . Esto le permitirá decir, por ejemplo, getlast mycommand para imprimir la última línea de comando que invoca mycommand , por lo que si olvidó guardar antes de ejecutar otro comando, aún puede guardar fácilmente la última instancia de un comando. Si no pasa un argumento a getlast (es decir, invoca fc como fc -ln "" "" , imprime sólo el último comando).

[Nota: Respuesta editada para tener en cuenta el comentario de @ Bram y el problema mencionado en la respuesta de @glenn jackman.]

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım