¿Cómo canalizo la salida estándar del terminal (stdout) al portapapeles?

106

Por ejemplo,

Digamos que quiero enumerar el contenido de una carpeta y pegarlo directamente en una ventana de chat para que lo vea un amigo.

Me doy cuenta de que podría hacer ls > filename.txtpara crear un archivo (filename.txt) con esos contenidos; Luego tendría que abrir o imprimir el archivo y seleccionar y copiar manualmente el bloque de texto ( que puede ser molesto / tedioso ). Claramente también podría seleccionar y copiar la salida lsdirectamente desde la ventana del terminal.

Sería mucho más rápido / fácil simplemente canalizar la salida estándar al portapapeles .

¿Qué comando de terminal me permite hacer esto?

Insperatus
fuente
1
unix.stackexchange.com/questions/3892/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

122

Esto se puede hacer con las utilidades de línea de comando xsel o xclip . Dado que ninguno de los programas viene con Ubuntu por defecto, primero deberá instalarlos a través del software de Ubuntu o el terminal. Así es como en la terminal (pero recuerda que solo necesitas uno de estos dos).

sudo apt install xsel
sudo apt install xclip

Ahora algunos ejemplos. Si desea copiar la salida del lsportapapeles, esto es lo que haría:

Con xsel:

ls | xsel -ib

Con xclip:

ls | xclip -sel clip

Por supuesto, esto también se puede utilizar para otros comandos de terminal . Supongamos que desea pegar la información de su red en un foro de ayuda.

Con xsel:

sudo lshw -C network | xsel -ib

Con xclip:

sudo lshw -C network | xclip -sel clip

¡Haz esto aún más fácil con un nuevo alias de bash!

Edite su ~/.bash_aliasesarchivo (si aún no existe, créelo primero con touch ~/.bash_aliases)

Luego agregue uno (dependiendo del programa con el que decidió ir) de lo siguiente:

alias copy='xclip -sel clip'

o

alias copy='xsel -ib'

Luego guardar y cerrar.

Ahora (después de reiniciar su terminal) puede enviar la salida estándar al portapapeles simplemente con una tubería para 'copiar' (o lo que decida nombrar su nuevo alias)

Por ejemplo:

ls | copy
Insperatus
fuente
1
Con las nuevas versiones de Ubuntu, deberías usar apt. Entonces sudo apt install xselo sudo apt install xclip.
wisbucky
1
Gracias por la respuesta, pero ¿sabes algo solo para el terminal Linux?
Mohamad
1
@jpaugh. Compare la documentación de administración de paquetes de Ubuntu para 16.04 frente a 14.04 . En 16.04, solo menciona apty no apt-get. Todavía puede usar apt-get, pero están tratando de alentar a las personas a usar apt.
wisbucky
2
No tiene que reiniciar el terminal; puedes simplementesource ~/.bash_aliases
Rob K
1
@Mohamad Son para ejecutarse dentro de un servidor X (ya que proporciona la funcionalidad del portapapeles). Si no tiene eso, debe hacerlo en su emulador de terminal. Cómo hacerlo depende del software real que esté utilizando, ya que no existe un estándar de facto para eso.
Thorbjørn Ravn Andersen
2

Si está intentando copiar al portapapeles usando Ubuntu en el subsistema de Windows para Linux (WSL), xsel o xclip no funcionarán a menos que esté usando X Windows ya que el portapapeles es solo para gráficos. Sin embargo, para canalizar la salida estándar del terminal al portapapeles en WSL Ubuntu puede usar clip.exe. Luego puede pegar en el terminal WSL Ubuntu con comandos de pegado estándar y el texto copiado también estará disponible en Windows. Por ejemplo,

pwd | clip.exe 

copiará el directorio de trabajo actual en el portapapeles (Windows).

Este resultado de búsqueda aparece en la parte superior al buscar formas de copiar / pegar texto en WSL, así que creo que vale la pena mencionar esto para que los lectores no instalen innecesariamente xsel o xclip en Ubuntu y en su lugar lo usen clip.exe.

Snap Shot
fuente