Guardar comando en el historial sin ejecutarlo en bash

8

¿Hay alguna manera de guardar un comando en el historial de bash sin ejecutarlo? p.ej

$ cmd [a long list of arguments] 

y ahora, mientras escribo, recuerdo que me gustaría hacer otra cosa primero. ¿Puedo tener algo como

$ cmd [a long list of arguments][some-key-strokes]

y esto en realidad no se ejecuta, pero entra en el historial de bash para que pueda usarlo más tarde.


fuente
55
En esa situación, solo prefijo la línea con #, y luego presiono Enter.
Oliver Charlesworth

Respuestas:

5

Puede haber una mejor manera, pero puede usar el :pmodificador de expansión de historial para imprimir la línea de comentarios actual sin ejecutar. !#es la línea actual, y %por sí sola no coincidirá con nada

$ cmd [arguments] !#%:p
Píldoras de explosión
fuente
¡frio! ;) Y sin necesidad de escapar caracteres especiales en el comando lo que puede causar problemas si el comando no es sólo ls -al1
¡frio! muy ordenado
8

Use la -sopción para el historycomando:

history -s cmd arg1 arg2

La llamada a history -ssí mismo, convenientemente, no se agrega al historial de comandos, por lo que en su historial parece que se ejecutó cmdsin hacerlo realmente.

chepner
fuente
¡frio! esto también es increíble
1

Por lo general, esto se hace por

echo 'cmd [a long list of arguments]' >> /home/you/bash_history

Tenga en cuenta que el nombre del historial puede diferir en su sistema. Por lo tanto, puede usar elHISTFILE entorno var

que hace:

echo 'cmd [a long list of arguments]' >> "$HISTFILE"
hek2mgl
fuente
1

Normalmente solo agrego un # al comienzo de la línea para transformar la línea en un comentario:

#cmd [a long list of arguments] 

Prefiero esta forma porque puedes hacerlo con solo 3 [4 si necesitas SHIFT para insertar #] pulsaciones de teclas

^a#<ENTER>

^ a va al comienzo de la línea actual

# agrega el comentario

ENTER ejecuta el comentario

usuario3726536
fuente
0

En esa situación, solo prefijo la línea con #, y luego presiono Enter.

... o usa la combinación de teclas: ESC #

bind -p | grep -i 'insert-comment'   # "\e#": insert-comment

Ver también: Bash - guardar comando sin ejecutarlo


fuente
0

Puede intentar agregar un espacio y | (tubería) al final de la línea, presionando enter, y luego Ctrl-C'ing.

( Space, |, Enter, Ctrl+ C)

El comando estará en tu historial con un | al final (simplemente puede eliminar con retroceso) en lugar de un # al principio (potencialmente más tedioso de eliminar).

DESCARGO DE RESPONSABILIDAD: ¡No sé si esto siempre funciona! ¡Úselo bajo su propio riesgo!

$ cmd [larga lista de argumentos] |

> Ctrl+C

PS Up

$ cmd [larga lista de argumentos] |

Josiah Krutz
fuente
0

Puedes intentar usar esta línea:

history -s -p $COMMAND

De help:

The -p option means to perform
history expansion on each ARG and display the result,

Esto significa que puede expandir cosas como !!y almacenar el resultado al final de la historia.

Felipe Alvarez
fuente
history -sfue dada en una respuesta hace dos años. ¿ -pMejora eso? ¿Qué -phacer? (En la medida en que tiene sentido hacerlo, debe modificar su respuesta para que sea mejor, y no responde a mi comentario con otro comentario.)
G-hombre dice 'Restablecer Mónica'
0

Otra opción es ir al comienzo de la línea y hacer lo que iba a hacer seguido de &&, como

rm old_file && cmd [args]

Entonces, si lo que desea hacer tiene éxito, su comando se ejecutará inmediatamente después, y si falla, su comando no se ejecutará, pero estará en la historia. También podrías hacer

test && cmd [args]

Dado que la prueba sin args fallará, pero esto es un puñado de pulsaciones de teclas adicionales en comparación con el #método.

Nickolai
fuente