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.


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

¡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.


¡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"

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


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


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] |


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.


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.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.