tutorial - script bash linux ejemplos
Canalizar a/desde el portapapeles en Bash script (23)
¿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
Aquí hay un script de bash listo para usar para leer el portapapeles que funciona en múltiples plataformas. Edite el script aquí si agrega funcionalidad (por ejemplo, más plataformas).
#!/bin/bash
# WF 2013-10-04
# multi platform clipboard read access
# supports
# Mac OS X
# git shell / Cygwin (Windows)
# Linux (e.g. Ubuntu)
#
# display an error
#
error() {
echo "error: $1" 1>&2
exit 1
}
#
# getClipboard
#
function getClipboard() {
os=`uname`
case $os in
# git bash (Windows)
MINGW32_NT-6.1)
cat /dev/clipboard;;
# Mac OS X
Darwin*)
pbpaste;;
# Linux
Linux*)
# works only for X clipboard - a check that X is running might be due
xclip -o;;
*)
error "unsupported os $os";;
esac
}
tmp=/tmp/clipboard$$
getClipboard >$tmp
cat $tmp
# comment out for debugging
rm $tmp
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:
user1@host:~$ mkfifo /tmp/sharedClip
luego en el terminal emisor
user1@host:~$ cat > /tmp/sharedClip
Por último, en el terminal receptor:
user2@host:~$ 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.
Copie y pegue en el portapapeles en Windows (Cygwin):
ver:
$ clip.exe -?
Descripción de CLIP: Redirige el resultado de las herramientas de la línea de comandos al portapapeles de Windows. Esta salida de texto puede ser pegada en otros programas. Lista de parámetros: /? Muestra este mensaje de ayuda. Ejemplos: DIR | CLIP Coloca una copia de la lista de directorios actual en el portapapeles de Windows. CLIP <README.TXT Coloca una copia del texto de readme.txt en el portapapeles de Windows.
También existe getclip (se puede usar en lugar de shift + ins!), Putclip (echo oaeuoa | putclip.exe para ponerlo en el clip)
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 el subsistema Windows para Linux, puede copiar al portapapeles con clip.exe.
cat file | clip.exe
Tenga en cuenta para utilizar el |
comando de la pipa. Y no es un comando, ya que eso no funcionará.
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).
Este es un script de Python simple que hace justo lo que necesitas:
#!/usr/bin/python
import sys
# Clipboard storage
clipboard_file = ''/tmp/clipboard.tmp''
if(sys.stdin.isatty()): # Should write clipboard contents out to stdout
with open(clipboard_file, ''r'') as c:
sys.stdout.write(c.read())
elif(sys.stdout.isatty()): # Should save stdin to clipboard
with open(clipboard_file, ''w'') as c:
c.write(sys.stdin.read())
Guárdelo como un ejecutable en algún lugar de su ruta (lo guardé en /usr/local/bin/clip
. Puede canalizar cosas para guardar en su portapapeles ...
echo "Hello World" | clip
Y puedes canalizar lo que está en tu portapapeles a algún otro programa ...
clip | cowsay
_____________
< Hello World >
-------------
/ ^__^
/ (oo)/_______
(__)/ )///
||----w |
|| ||
Ejecutarlo por sí solo simplemente mostrará lo que está en el portapapeles.
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.
Sólo para Mac:
echo "Hello World" | pbcopy
pbpaste
Estos se encuentran en /usr/bin/pbcopy
y /usr/bin/pbpaste
.
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
También hay xclip-copyfile .
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)
en macOS use pbpaste
p.ej:
actualizar el portapapeles
pbpaste | ruby -ne '' puts "/|" + $_.split( )[1..4].join("/|") '' | pbcopy
disfrutar.
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.