¿Cómo copiar un comando ingresado previamente usando la utilidad de historial sin ejecutarlo nuevamente?

14

Puedo usar el historycomando en CentOS para obtener una lista de los comandos ingresados ​​anteriormente, sin embargo, si hago algo como:, el !372historial intentará ejecutar el comando al que se hace referencia.

Necesito que el comando de ejecución anterior aparezca en el cursor actual. Aquí hay un ejemplo:

[dev@home ~]$ previous_command_no_execute!372  
centosnoob
fuente

Respuestas:

25

¿Qué tal, poner esto en su línea de comando:

$ !372

Luego presione ESCseguido de CTRL+E. Esto se expandirá automáticamente en la línea de comando sin ejecutarlo realmente. (también expande todo lo demás en la línea, incluidos los env)

Esto solo funciona en Bash, que yo sepa.

SmallClanger
fuente
Sí, esta es la solución exacta.
centosnoob
1
Para una solución en zsh, presione la pestaña después de escribir !372y se expandirá por usted.
Reid
10

Puede usar Ctrlry luego escribir algunos caracteres del comando original, por ejemplo

(reverse-i-search)`/etc': sudo /etc/init.d/apache2 restart

escribí arriba Ctrl-r /etcy saqué el sudo /etc/init.d/apache2 restartcomando de la historia

usuario9517
fuente
6

history | grep 372 debería funcionar, ¿verdad?

Editar:

Además, podría hacer algo como echo !372 > /dev/clipcolocar el directorio de comandos en su portapapeles.

MDMarra
fuente
siempre funcionó para mí ...
voretaq7
no, eso solo encuentra ese comando específico ejecutado previamente.
centosnoob
Entonces, tanto yo como @ voretaq7 estamos entendiendo mal su pregunta. ¿Podrías ser un poco más claro?
MDMarra
@MDMarra He actualizado la pregunta. Espero que arroje algo más de luz.
centosnoob
@centosnoob mirando su actualización, y asumiendo que su consola admite un mouse y copiar y pegar (y es raro estar directamente en la consola de estilo terminal sin capacidad de copiar y pegar en estos días) la solución de copiar y pegar es realmente la menos dolorosa . la edición de comandos de vi-estilo que he descrito en mi respuesta es otra opción, pero yo soy un fanático e incluso vi que no utilizan la edición de línea de comandos de vi-estilo ...
voretaq7
4

MDMarra dio la manera fácil ( history|grepy copie / pegue usando su entorno de escritorio, suponiendo que tenga uno). Proporcionaré lo que llamo de la manera difícil, que funciona si no tiene un entorno de escritorio o un mouse.

Asumiendo que estás ejecutando bash como tu shell:

$ set -o vi
$ ESC372k

(ahora tendrá el comando que ejecutó hace 372 comandos, en línea, y estará en vimodo de comando estilo. Edite como lo haría si estuviera usando ex/ vi)

voretaq7
fuente
Interesante. Eso solo parece funcionar si tienes "set -o vi" ejecutado desde el principio. Podría tener que poner eso en el perfil bash o algo así.
Matt
Esa es una de esas cosas "siempre uso vi, ¿por qué no estoy usando enlaces vi para editar líneas en bash"? Se tarda un poco en acostumbrarse, luego los enlaces de estilo emacs que todos los demás usan se sienten raros e inútiles.
cjc
@ Matt Sí: debe configurar su modo de viedición para editar el estilo. Se debe trabajar tan pronto como usted set -o vi, y debería funcionar para toda su historia (el modo de edición es sólo una interfaz para la historia de comandos de la shell y otras cosas).
voretaq7
@cjc Uso vi como mi editor de elección, pero no uso los enlaces de estilo vi para editar mi línea de comando (simplemente sabía cómo hacer esto en modo vi desde la parte superior de mi cabeza, pero otros han publicado el equivalente en modo emacs que puede ser más amigable :).
voretaq7
4

La forma más simple y rápida de hacer lo que quieres es ejecutar:

!372:p

seguido de Entery

MikeyB
fuente
0

¿Estás en un sistema de escritorio o servidor?

En mi sistema de escritorio Kubuntu con el shell abierto, admite el resaltado con el mouse. Por lo general, solo resalto el texto con el mouse y hago clic en el botón central del mouse para pegarlo. ¿Funcionaría para usted?

Entonces puedes buscar el comando. Resalta el texto. Pégalo con el botón central del mouse, luego edítalo.

Puede haber una mejor manera, pero esto funciona para mí.

Mate
fuente
0

no hay ningún comando para pegar automáticamente, pero puede recuperar cualquier comando en un editor para editarlo antes de ejecutarlo. esto puede lograr lo que está buscando, pero al salir del comando se ejecutará, por lo que si desea abortar, debe borrar el búfer de edición antes de salir de su editor.

fc -e vi 372 372

johnshen64
fuente