linux - world - Canalizar a/desde el portapapeles en Bash script




shell script hello world (16)

¿Es posible canalizar desde / hacia el portapapeles en Bash?

Ya sea que esté canalizando hacia / desde un controlador de dispositivo o utilizando una aplicación auxiliar, no puedo encontrar nada.

Por ejemplo, si /dev/clip era un dispositivo que se vinculaba al portapapeles, podríamos hacerlo:

cat /dev/clip        # Dump the contents of the clipboard
cat foo > /dev/clip  # Dump the contents of "foo" into the clipboard

Instalar

# You can install xclip using `apt-get`
apt-get install xclip

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

Si no tiene acceso a apt-get ni a pacman , ni a dnf , las fuentes están disponibles en sourceforge .

Preparar

Golpetazo

En ~/.bash_aliases , agregue:

alias setclip="xclip -selection c"
alias getclip="xclip -selection c -o"

No olvides cargar tu nueva configuración usando . ~/.bash_aliases . ~/.bash_aliases o reiniciando su perfil.

Pez

En ~/.config/fish/config.fish , agregue:

abbr setclip "xclip -selection c"
abbr getclip "xclip -selection c -o"

No olvide reiniciar su instancia de peces reiniciando su terminal para que se apliquen los cambios.

Uso

Ahora puedes usar setclip y getclip , por ejemplo:

$ echo foo | setclip
$ getclip
foo

Respuesta 2018

Usa el clipboard-cli . Funciona con macOS, Windows, Linux, OpenBSD, FreeBSD y Android sin ningún problema real.

Instalalo con:

npm install -g clipboard-cli

Entonces puedes hacer

echo foo | clipboard

Si lo desea, puede hacer un alias de cb colocando lo siguiente en su .bashrc , .bash_profile o .zshrc :

alias cb=clipboard


Asegúrese de que está utilizando el alias xclip="xclip -selection c" contrario no puede usar Ctrl + v para pegarlo nuevamente en un lugar diferente.

echo test | xclip    

Ctrl + v === test


Aunque> 1 año después, comparto una solución ligeramente diferente. Espero que esto sea de utilidad para alguien.

Ayer me encontré con la pregunta: "¿Cómo compartir el portapapeles entre diferentes sesiones de usuario?" . Al cambiar de sesión con ctrl alt F7 - ctrl alt F8 , de hecho, no puede pegar lo que copió.

Se me ocurrió la siguiente solución rápida y sucia , basada en una tubería con nombre. Seguramente es bastante simple y crudo, pero lo encontré funcional:

[email protected]:~$ mkfifo /tmp/sharedClip

luego en el terminal emisor

[email protected]:~$ cat > /tmp/sharedClip

Por último, en el terminal receptor:

[email protected]:~$ cat /tmp/sharedClip

Ahora, escribe o pega cualquier cosa en el primer terminal, y (después de presionar regresar ), aparecerá inmediatamente en el terminal receptor, desde donde puedes Copiar / Pegar nuevamente en cualquier lugar que desees.

Por supuesto, esto no solo toma el contenido del portapapeles del usuario 1 para que esté disponible en el portapapeles del usuario 2, sino que requiere un par adicional de clics de Pegar y Copiar.


Desde este hilo, hay una opción que no requiere la instalación de ningún gclip xclip gclip / xclip / xsel .

Un script de perl (ya que perl suele estar siempre instalado)

use Win32::Clipboard;
print Win32::Clipboard::GetText();

En Windows (con Cygwin) intente cat /dev/clipboard o echo "foo" > /dev/clipboard como se menciona en this artículo.


En macOS use los comandos integrados en pbcopy y pbpaste .

Por ejemplo, si ejecuta

cat ~/.bashrc | pbcopy

El contenido del archivo ~/.bashrc estará disponible para pegarlo con el acceso directo de Cmd + v .


Eres un poco ambiguo. Espero que sea un usuario de Linux dentro de X que quiera poner cosas en el portapapeles de X PRIMARY .

Es importante entender que bash no tiene un portapapeles. No hay tal cosa como "el" portapapeles, porque bash puede ejecutarse en Windows, Mac OS X, muchos otros sistemas operativos, dentro de X, fuera de X, ... Sin mencionar que X en sí tiene tres portapapeles diferentes. Hay una gran cantidad de portapapeles con los que podrías estar tratando. Por lo general, el portapapeles con el que desea hablar tiene una utilidad que le permite hablar con él.

En el caso de X, sí, hay xclip (y otros). xclip -selection c enviará datos al portapapeles que funciona con Ctrl-C, Ctrl-V en la mayoría de las aplicaciones.

Si estás tratando de hablar con el portapapeles de Mac OS X, hay pbcopy .

Si estás en el modo de terminal de Linux (sin X), quizás gpm buscar en gpm .

También hay una screen GNU que tiene un portapapeles. Para poner cosas allí, mira el comando de screen " readreg ".

En Windows / cygwin, use /dev/clipboard o clip para las versiones más recientes de Windows (al menos Windows 10).


Hay diferentes portapapeles en Linux; el servidor X tiene uno, el administrador de ventanas puede tener otro, etc. No hay un dispositivo estándar.

Oh, sí, en CLI, el programa de pantalla también tiene su propio portapapeles, al igual que otras aplicaciones como Emacs y vi .

En X, puedes usar xclip .

Puede consultar este hilo para otras posibles respuestas: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html


Hay un par de maneras. Algunas de las formas que se han mencionado incluyen (creo) tmux, screen, vim, emacs y el shell. No sé emacs o pantalla, así que repasaré los otros tres.

Tmux

Si bien no es una selección X, tmux tiene un modo de copia accesible mediante el prefix-[ (el prefix es Ctrl + B por defecto). El búfer utilizado para este modo es separado y exclusivo de tmux, lo que abre bastantes posibilidades y lo hace más versátil que las selecciones de X en las situaciones adecuadas.

Para salir de este modo, pulsa q ; para navegar, use su enlace vim o emacs (predeterminado = vim), así que hjkl para movimiento, v/V/Cv para la selección de caracteres / línea / bloque, etc. Cuando tenga su selección, presione Entrar para copiar y salir del modo.

Para pegar desde este búfer, use prefix-] .

Cáscara

Cualquier instalación de X11 parece venir con dos programas por defecto: xclip y xsel (un poco como la forma en que también viene con startx y xinit ). La mayoría de las otras respuestas mencionan xclip , y realmente me gusta xsel por su brevedad, así que xsel .

Desde xsel(1x) :

Opciones de entrada

-a, --apagar

anexar entrada estándar a la selección. Implica -i .

-f, --sigue

adjuntar a la selección como entrada estándar crece. Implica -i .

-i, --input

leer entrada estándar en la selección.

Opciones de salida

-o, - salida

escribir la selección a la salida estándar.

Opciones de accion

-c, --claro

Borrar la selección. Anula todas las opciones de entrada.

-d, --delete

Solicitar que se elimine la selección actual. Esto no solo borra la selección, sino que también solicita al programa en el que reside la selección que se eliminen los contenidos seleccionados. Anula todas las opciones de entrada.

Opciones de seleccion

-p, --primaria

operar en la selección PRIMARIA (por defecto).

-s, --secundaria

Operar en la selección SECUNDARIA.

-b, --clipboard

operar en la selección CLIPBOARD.

Y eso es todo lo que necesitas saber. p (o nada) para PRIMARY , s para SECONDARY , b para CLIPBOARD , o para salida.

Ejemplo: digamos que quiero copiar la salida de foo de un TTY y pegarla en una página web para un informe de error. Para hacer esto, sería ideal copiar a / desde la sesión TTY / X. Entonces, la pregunta es, ¿cómo accedo al portapapeles desde TTY?

Para este ejemplo, asumiremos que la sesión X está en exhibición :1 .

$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1

Entonces puedo Ctrl-V en la forma como de costumbre.

Ahora diga que alguien en el sitio de soporte me da un comando para ejecutar para solucionar el problema. Es complicado y largo.

$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99

El pedido de pizza parece ser un uso productivo de la línea de comando.

... sigue adelante.

Empuje

Si se compila con +clipboard (¡Esto es importante! Verifique su vim --version ), Vim debe tener acceso a las selecciones X PRIMARY y CLIPBOARD . Se puede acceder a las dos selecciones desde los registros * y + , respectivamente, y se pueden escribir y leer en su tiempo libre igual que en cualquier otro registro. Por ejemplo:

:%y+    ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p     ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example

Sin embargo, si su copia de vim no admite directamente el acceso a las selecciones de X, no es el fin del mundo. Puede usar la técnica xsel como se describe en la sección anterior.

:r ! xsel -bo ; read  (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b  ; write (w) to the stdin of    (!) `xsel -b`

Unir un par de combinaciones de teclas y debe ser bueno.


Si eres como yo y ejecutas en un servidor Linux sin privilegios de root y no hay xclip o gpm, podrías solucionar este problema simplemente usando un archivo temporal. Por ejemplo:

$ echo "hello world" > ~/clip
$ echo `cat ~/clip`
hello world


Unos pocos programas de Windows que escribí hace años. Le permiten volcar, empujar, agregar e imprimir el portapapeles. Funciona así:

dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip

Incluye código fuente: cmd_clip.zip


Wow, no puedo creer cuántas respuestas hay para esta pregunta. No puedo decir que los probé todos, pero probé los 3 o 4 principales y ninguno de ellos funciona para mí. Lo que me funcionó fue una respuesta ubicada en uno de los comentarios escritos por un usuario llamado doug. Como lo encontré tan útil, decidí repetir en una respuesta.

Instala la utilidad xcopy y cuando estés en la Terminal, ingresa:

Dupdo

Thing_you_want_to_copy|xclip -selection c

Pegar

myvariable=$(xclip -selection clipboard -o)

Me di cuenta de un montón de respuestas recomendadas pbpaste y pbcopy. Si estás en esas utilidades pero por alguna razón no están disponibles en tu repositorio, siempre puedes crear un alias para los comandos de xcopy y llamarlos pbpaste y pbcopy.

alias pbcopy="xclip -selection c" 
alias pbpaste="xclip -selection clipboard -o" 

Entonces se vería así:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)

xsel en Debian / Ubuntu / Mint

# append to clipboard:
cat 'the file with content' | xsel -ib

# or type in the happy face :) and ...
echo 'the happy face :) and content' | xsel -ib

# show clipboard
xsel -b

# Get more info:
man xsel

Instalar

sudo apt-get install xsel

  xsel -b

Hace el trabajo para x11, en su mayoría ya está instalado. Una mirada en la página man de xsel vale el esfuerzo.





clipboard