8 votos

Terminal Mac o iTerm: ¿Copiar el comando actual pero excluir el prompt?

Estoy usando Terminal o iTerm (iTerm2). Digamos que he tecleado un comando pero aún no he pulsado intro. O quizás he usado la flecha hacia arriba para navegar por mi historial de comandos. ¿Cómo copio el comando actual en el portapapeles de MacOS? Pero tampoco quiero que incluya el prompt. ¿Hay algún atajo de teclado para hacer esto?

Por ejemplo, digamos que el terminal muestra esto:

myhostname:Documents kevuser$ mkdir cool_directory_name

¿Cuál es el atajo de teclado para copiar mkdir cool_directory_name al portapapeles de Mac OS? ¿Puedo añadir esa funcionalidad de alguna manera? Parece que cada vez que intento copiar toda la línea incluye la parte del prompt de la terminal, myhostname:Documents kevuser$ que no quiero que se copie y pegue.

0 votos

Fíjate en que el terminal no sabe nada de avisos o comandos; eso es dominio del shell (normalmente bash o zsh). Del mismo modo, el intérprete de comandos, al ser un programa Unix general, no un programa específico de MacOS, no sabe nada sobre el portapapeles de MacOS (¡pero tiene un portapapeles propio!).

12voto

Douglas Puntos 10417

Basta con utilizar el comando

 echo !! | pbcopy

El doble signo de exclamación es "última orden". A continuación, se canaliza a la pbcopy que lo coloca en el portapapeles.

No hay atajo, pero puedes hacer un alias en tu ~/.bash_profile o en tus archivos ~/.zprofile, dependiendo de tu shell. Esto te permitirá ejecutar el comando con un nombre fácil de recordar:

alias cplastcmd=‘echo !! | pbcopy’

Si quieres copiar un texto que has introducido pero no ejecutado, puedes utilizar lo siguiente:

  • ^ ControlU : Corta la línea anterior al cursor y la coloca en el portapapeles.
  • ^ ControlK : Corta la línea después del cursor y la pone en el portapapeles. Utilizar con ^ ControlA para pasar al principio de la línea.
  • ^ ControlY : Pegar el último comando del portapapeles

Nota: Los atajos de teclado estándar para copiar y pegar son ⌘ Command o ^ Control C y V no funcionan en Terminal.

Por último, si tienes un ratón con un tercer botón central, puedes seleccionar el texto y pulsar el botón central para copiar y pegar el texto seleccionado.

1 votos

Esto requiere ejecutar primero el comando; la pregunta se refiere a capturar un comando que aún no se ha ejecutado. Además, esto no funcionará correctamente si hay comillas, escapes, comodines, sustituciones de comandos, redirecciones, etc en el comando, porque imprimirá el comando después de todo el análisis de shell, redirecciones, etc suceder.

0 votos

Si el comando no se ha ejecutado, para empezar no estaría en el historial.

0 votos

¿Por qué es tan fácil en mi máquina? Debo tener algo configurado que hace que el simple copiar/pegar funcione. Vea mi respuesta más abajo. ¡Realmente funciona así en mi máquina!

0voto

MrTemple Puntos 61

Aparte de la respuesta de Allan usando pbcopy para capturar el último comando ejecutado (que no funciona para comandos no ejecutados o ejecutados hace algún tiempo), la única forma de copiar la línea actual en Terminal es resaltando y copiando.

Una opción para hacer esto más fácil es añadir algunos espacios en blanco adicionales a su prompt. Esto no le ayudará a capturar SÓLO el comando que desea, ya que puede capturar espacios en blanco adicionales (que a menudo no importan), pero puede hacer que sea más fácil evitar capturar texto adicional en el prompt.

Tu prompt puede estar configurado en diferentes lugares dependiendo de la configuración y shell que estés usando (~/.bashrc, ~/.zshrc, etc). En algún lugar aparecerá como:

PS1="[\u@\h \W]\\$ "

Dónde PS1= es establecer el aviso. Puede modificar el espacio final para añadir espacios adicionales.

Siento que no haya una respuesta mejor.

Como alternativa, a veces hago doble clic en la primera palabra/comando de la línea y, a continuación, pulso Mayúsculas y pulso el final de la línea, y eso garantizará al menos que no te tragues ninguna parte de la indicación.

0voto

virsir Puntos 2981

En iTerm2, si ha activado Integración de Shell :

  1. Pulse Home para ir al principio de la línea
  2. Tipo echo y Enter para que la línea actual se imprima como salida
  3. Pulse Cmd + Shift + A para seleccionar la salida del último comando
  4. Cmd + C para copiar en el portapapeles.

-1voto

john Puntos 11

En mi iMac con High Sierra, puedo usar el cursor del ratón para seleccionar cualquier parte de una línea que desee y copiarla. Con una ventana de terminal abierta, si muevo el cursor del ratón a la ventana de terminal y hago clic, el cursor del ratón se convierte en el cursor en cruz. Entonces puedo moverlo por la ventana de terminal y seleccionar una parte de cualquier línea que elija.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X