¿Cómo pegar comandos en un TTY?

20

Tengo algunos comandos bastante largos y rutas de archivos que he copiado al portapapeles y necesito ejecutar en un TTY, sin embargo, las rutas de archivos son demasiado largas para volver a escribirlas y me gustaría pegarlas después de $(puedo volver a escribir los comandos antes ellos entonces), ¿hay alguna manera de hacer esto?

Así que me gustaría ejecutar un comando y tenerlo en la siguiente línea comenzando con $poner el texto copiado en el portapapeles de esta manera:

$ specialCommandToPasteText
$ pastedText

Estoy ejecutando Ubuntu GNOME 16.04 con GNOME 3.20.


fuente
3
Pegue los comandos en un script Bash en un editor de texto, luego ejecute el script desde el TTY?
Nick Weinberg
@NickWeinberg: No es realmente una opción, todo esto está en la CLI y los programas que ejecuto allí solo tienen la capacidad de copia.
2
¿Desde qué programa (s) los está copiando?
Nick Weinberg
¿Está utilizando gpmpara proporcionar compatibilidad con el mouse en el VT, como se sugiere en su propia respuesta a una pregunta anterior ?
steeldriver
1
Una posible solución sería utilizar la funcionalidad de copiar / pegar en tmux o pantalla
Nick Weinberg

Respuestas:

28

Es simple, pero necesita una herramienta adicional.

  1. Instale el paquete xselque proporciona un comando fácil para acceder al portapapeles:

    sudo apt-get install xsel
    
  2. Averigüe cuál $DISPLAYestá usando su escritorio. Por lo general, debería serlo :0, pero puede verificarlo ejecutando este comando en un emulador de terminal en su escritorio GUI:

    echo $DISPLAY
    

    Asumiré que la salida es :0, reemplácela con su salida real en los siguientes comandos si es diferente.

  3. Copie el comando que desea ejecutar en el TTY, por ejemplo, usando Ctrl+ C.

  4. Cambie al TTY que desea usar, por ejemplo, a TTY1 usando Ctrl+ Alt+ F1.
    Inicie sesión escribiendo su nombre de usuario y contraseña.

  5. Ingrese el comando completo que desea ejecutar, pero reemplace la parte que desea insertar desde el portapapeles $(DISPLAY=:0 xsel -ob).

    Por ejemplo, si copió una gran lista de paquetes para instalar, podría escribir esto en el TTY:

    sudo apt-get update && sudo apt-get install $(DISPLAY=:0 xsel -ob)
    

    Sin embargo, el fragmento del portapapeles no necesariamente tiene que estar al final de su comando, puede aparecer en cualquier lugar.


Para simplificar aún más las cosas, vamos a mover esto aún un poco complicado DISPLAY=:0 xsel -oba un script. Lo nombraré PASTE(porque pasteya está en uso), pero también puedes llamarlo de manera diferente.

Para crear el archivo de script en una ubicación donde cada usuario pueda ejecutarlo sin tener que especificar la ruta completa (lo recomiendo /usr/local/binpara esto) y hacerlo ejecutable, simplemente ejecute esos dos comandos:

( echo '#!/bin/bash' && echo 'DISPLAY=:0 xsel -ob' ) | sudo tee /usr/local/bin/PASTE
sudo chmod +x /usr/local/bin/PASTE

Ahora simplemente puede incrustar $(PASTE)en sus comandos en un TTY para insertar el contenido del portapapeles desde su escritorio allí.

Byte Commander
fuente
2
¡Gracias! ¡Esto me ayudará con muchas más cosas ahora de lo que originalmente pregunté! :)
1
Incluso puede almacenar DISPLAY=:0 xsel -obcomo alias Bash o script pequeño en cualquier lugar (nombremos PASTE) y solo usar una forma abreviada como $(PASTE)usar el contenido del portapapeles en sus comandos.
Byte Commander
Muy buen enfoque
Sergiy Kolodyazhnyy
21

Personalmente, solo uso archivos de texto:

  1. En su entorno de escritorio, abra una terminal y

    echo "whatever long text you have copied" > file
    
  2. Suelta al tty y

    $(cat file)
    
terdon
fuente
2
Esto es bueno saberlo. En realidad, no pensé que un comando simple como este funcionaría tan bien. A veces la mente simplemente piensa demasiado complicada. ¡Gracias! =)
Terrance
1
Solo uso some-command 'shift + insert (para pegar). 'regreso. Pegar dentro de comillas simples o dobles evita que las nuevas líneas en el texto pegado ejecuten el comando antes de que pueda editarlo para solucionar cualquier problema. IDK lo que gana para poner el texto en un archivo. Bash tiene pulsaciones de teclas de edición de línea muy potentes, como la flecha Ctrl-izquierda o Ctrl-derecha para moverse por palabras. alt-backspace para eliminar palabras al revés. Alt-d para eliminar palabras hacia adelante, etc., etc.
Peter Cordes
Ah, acabo de descubrir que el OP significa una consola de texto VT cuando dice TTY. Alguien realmente debería editar la pregunta, porque cada terminal en el que puede ejecutar un shell es un tty, incluidos los pseudo terminales controlados por programas similares a xterm.
Peter Cordes
@PeterCordes, sí, pero el término "tty" a menudo, si no es correcto, se usa para referirse a las consolas virtuales.
terdon
4

Otra posible solución alternativa no mencionada anteriormente implica el uso vim, pegado y ejecución :!unix_commanden modo comando:

  1. copia los comandos y la ruta al portapapeles
  2. abierto vim, vaya al modo de comando Esc, ingrese el indicador:
  3. escriba una explosión ! y luego pegue Ctrl+ Shift+ Vel comando que copió anteriormente en el indicador y ejecute
Marcelinov
fuente