Canalización hacia / desde el portapapeles en el script Bash

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

Ya sea que esté conectando a / desde un controlador de dispositivo o usando una aplicación auxiliar, no puedo encontrar nada.

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

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

preguntado el 14 de abril de 09 a las 19:04

He estado usando :%y+ en vim, que es vim-speak para "tirar (copiar) todas las líneas en el registro '+' (la X PRIMARY portapapeles) ". Puede reemplazar % con un rango si quieres ser específico. Pero hay tres advertencias: 1. Ahora, debe guardar el texto en un archivo antes de poder copiarlo. Esto contrasta con el xclip comando mencionado en las respuestas. 2. Si aún no sabe cómo grabar, esto puede resultar tedioso. 3. Solo puede hacer esto si una determinada función está habilitada al compilar vim. Si instala GVim, debería estar habilitado de forma predeterminada tanto en la GUI como en las instancias de terminal de vim. -

@BradenBest, deberías poner esto como respuesta. Estoy en un entorno NIX y no pude instalar xclip. Tu respuesta funcionó a las mil maravillas. -

@HankCa Está bien, publiqué una respuesta. Dime que piensas. -

@BradenBest es una respuesta muy completa. Solo me gustó el :%y+ uno, pero está bien, ¡tienes todas las bases cubiertas! Buena. -

Otra opción: usar un pequeño script de perl: no requiere instalación. Ver mi respuesta a continuación. -

30 Respuestas

Respuesta 2018

Utiliza portapapeles-cli. Funciona con macOS, Windows, Linux, OpenBSD, FreeBSD y Android sin problemas reales.

Instálelo con:

npm install -g clipboard-cli

Entonces puedes hacer:

echo foo | clipboard 

Si lo desea, puede utilizar un alias para cb poniendo lo siguiente en su .bashrc, .bash_profile o el .zshrc:

alias cb=clipboard

Respondido 23 ago 20, 16:08

¿Estás seguro de que es una caja fuerte? npm ¿paquete? - Johnny

@Stas, espero que sí, está hecho por Sindresorhus (github.com/sindresorhus), el contribuyente de nodo más prolífico. Es responsable de la biblioteca de pruebas de Ava, el xo linter, Yeoman y muchos otros proyectos. También es responsable de innumerables bibliotecas pequeñas como esta, que colectivamente colocan su código en casi todos los sitios web que usan JS en Internet. Eso no quiere decir que no pueda comprometerse; solo que la cantidad de ojos en sus repositorios y su propia reputación lo hacen mucho menos probable que la mayoría de los repositorios npm aleatorios. - Evan Conrado

¡Fresco! Trabajando en Ubuntu GNU / Linux donde xclip no funciona. - kevin buchs

Si bien no funciona en WSL, Linux en Windows. - KangqiaoZhao

Hay una gran cantidad de portapapeles con los que podrías estar lidiando. Supongo que probablemente sea un usuario de Linux que quiere poner cosas en el portapapeles principal de X Windows. Por lo general, el portapapeles con el que desea hablar tiene una utilidad que le permite hablar con él.

En el caso de X, 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á en Mac OS X, hay pbcopy. p.ej cat example.txt | pbcopy

Si está en modo terminal de Linux (no X), busque en gpm or detectar que tiene un portapapeles. Prueba el screen comando readreg.

En Windows 10+ o cygwin, use /dev/clipboard or clip.

Respondido el 07 de junio de 20 a las 10:06

en Windows, /dev/clipboard también funciona para shells bash Msys / MinGW - Mihai Rotaru

Tenga en cuenta que xclip -selection c enviará datos al portapapeles que funciona con ^ C, ^ V en la mayoría de las aplicaciones - Klaas van Schelven

en las versiones más recientes de Windows, puede usar clip Me gusta esto: dir | clip - maep

Es triste que GNU / Linux no tenga un dispositivo como /dev/clipboard, y obliga a instalar xclip o gpm que falta por defecto al menos en Kubuntu (Supongo que en la mayoría de las otras distribuciones también). - Hola angel

Asegúrate de estar usando alias xclip="xclip -selection c" o de lo contrario no podrás pegar usando Ctrl+v.

Ejemplo: después de correr echo -n test | xclip, Ctrl+v pegará test

Respondido 09 Oct 20, 18:10

¿Cómo haría uno para pegarlo? sin ese argumento de comando? - Jonás

xclip -selection clipboard -o - doug

ya que voy y vengo entre osx y linux, tengo lo siguiente en mis archivos de puntos. alias pbcopy="xclip -selection c" alias pbpaste="xclip -selection clipboard -o" Espero que ayude. - doug

@ApockofFork, xclip no está agregando una nueva línea, echo es. Intentar printf test | xclip -i -selection clipboard (printf no agrega una nueva línea a menos que escriba 'test\n'.) - david x

O usar echo -n en lugar de printf. - cristian pietsch

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 pacman, ni dnf, las fuentes están disponibles en forjado.

Instalación

Asestar un golpe

In ~/.bash_aliases, agregue:

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

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

Peces

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

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

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

Uso

Ahora puede utilizar setclip y getclip, p.ej:

$ echo foo | setclip
$ getclip
foo

Respondido 30 ago 17, 14:08

Para todas las demás distribuciones: puede descargar la fuente desde sourceforge.net/proyectos/xclip - Scz

+1 ¡La mejor solución! En Arco, sudo pacman -S xclip. Pero ten en cuenta que .bashrc no es el mejor lugar. Recomiendo al usuario final que lea los archivos bashrc, bash_aliases y .profile adecuados y cómo bash maneja cada uno. Consejo: colóquelo en .bash_aliases en su lugar. - eduncan911

¡Gracias @ eduncan911! :) Se agregó la opción de usar el pacman administrador de paquetes y eliminó el .bashrc proposición. sé .bash_aliases está más adaptado, pero el resultado final es el mismo (.bashrc simplemente requiere .bash_aliases si existiera). Si la gente quiere un sistema desordenado, déjeles tener uno. :) - tleb

@ eduncan911 No puedo encontrar mención de .bash_aliases en el manual de bash. Creo que debe ser una modificación específica de la distribución para .bashrc. (He visto distribuciones específicas .bashrcs que importan .bash_profile si existe). Basado en eso, diría .bash_aliases no es una convención universal, sino una abreviatura conveniente para quienes la tienen. - jpaugh

@jpaugh tienes razón. mi .bashrc fuentes .bash_aliases al final. ;) Sigo esta antigua convención, que sigue siendo 100% compatible en Arch, Ubuntu / Debian, variantes de Raspberry, macOS / OSX y Windows Bash: stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff Con esa convención, uso exactamente los mismos archivos de puntos en todas las máquinas que toco. Es bastante agradable: github.com/eduncan911/dotfiles - eduncan911

En macOS, utilice el pbcopy y pbpaste comandos.

Por ejemplo, si corres

cat ~/.bashrc | pbcopy

el contenido de la ~/.bashrc El archivo estará disponible para pegar con el Cmd+v atajo.

respondido 09 nov., 18:14

Trata

xclip

xclip - command line interface to X selections (clipboard) 

hombre

contestado el 13 de mayo de 13 a las 01:05

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

Respondido 18 ago 15, 16:08

¿En qué se diferencia esto de echo "foo" | xclip -selection c? - Léo Léopold Hertz 준영

Hay algunas respuestas sobre esto Pregunta a la respuesta de Ubuntu, pero principalmente xsel y xclip son equivalentes en todos los sentidos excepto que xclip puede leer / escribir archivos por nombre, pero xsel requiere redirección de shell si desea acceder a un archivo. - Colin D. Bennett

xsel funciona bien a partir de scripts, mientras que xclip funciona solo desde el indicador. No estoy seguro de por qué. - NVRM

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

Instale la utilidad xcopy y cuando esté en la Terminal, ingrese:

Copiar

Thing_you_want_to_copy|xclip -selection c

Pasta

myvariable=$(xclip -selection clipboard -o)

Noté que muchas respuestas recomendaban pbpaste y pbcopy. Si le gustan esas utilidades pero por alguna razón no están disponibles en su repositorio, siempre puede crear un alias para los comandos 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)

Respondido el 11 de diciembre de 17 a las 06:12

Genial, tu parte de alias se corresponde bastante bien con MacOS. - PradoMuffins

En el subsistema de Windows para Linux, puede copiar al portapapeles con clip.exe.

cat file | clip.exe

Tenga en cuenta para utilizar el | comando de tubería. Y no un > comando, ya que eso no funcionará.

respondido 28 mar '18, 15:03

Aquí hay un script 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

respondido 14 mar '15, 16:03

Solo para Mac:

echo "Hello World" | pbcopy
pbpaste

Estos se encuentran /usr/bin/pbcopy y /usr/bin/pbpaste.

Respondido el 07 de junio de 15 a las 12:06

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

Respondido 07 Feb 21, 12:02

Como mencionó el usuario @maep en un comentario separado, las versiones más nuevas de Windows (solo puedo confirmar para Win10) simplemente pueden conectarse a clip. Estoy usando msysgit 1.9.5 y esto funcionó. - shawn erquhart

echo "foo" > /dev/clipboard parece destruir las líneas nuevas por completo (no es una cosa \ r \ n \ n, pero ha desaparecido por completo) - user1529413

arreglo de enlace roto (no se pudo editar): pgrs.net/2008/01/11/command-line-portapapeles-acceso - Chipre

Enlace actualizado ahora. - normando h

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 algunas 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

Respondido el 12 de Septiembre de 16 a las 22:09

Parece que crear / dev / clip sería un buen proyecto para alguien. - TED

Soy perfectamente consciente de los múltiples portapapeles. ¿Cómo hace esto que mi pregunta sea más difícil de responder? - Moinudin

Tendría sentido si los portapapeles estuvieran estandarizados, probablemente no estaría de más si pudiera usar / dev / clip1, / ​​dev / clip2 .. / dev / clip para acceder a ellos, el único problema es que son específicos del usuario y los dispositivos son para todo el sistema. Pero si crea un controlador de dispositivo del kernel que enmascara según el UID de acceso, debería funcionar como se esperaba. - usuario4401178

He encontrado una buena referencia: https://unix.stackexchange.com/questions/69111/

En mi caso me gustaría pegar contenido en el portapapeles y también ver lo que se ha pegado allí, así que usé también el tee comando con un descriptor de archivo:

echo "just a test" | tee >(xclip -i -selection clipboard)

>() es una forma de sustitución de procesos. bash reemplaza cada uno con la ruta a un descriptor de archivo que está conectado a la entrada estándar del programa entre paréntesis.

La teecomando bifurca su comando permitiéndole "canalizar su contenido" y ver el resultado en la salida estándar "stdout"

también puede crear alias para obtener y escribir en el portapapeles, lo que le permite usar "pbcopy" y "pbpaste" como si estuviera en MAC. En mi caso, como uso zsh, tengo esto en mi archivo de alias:

(( $+commands[xclip] )) && {
    alias pbpaste='xclip -i -selection clipboard -o'
    alias pbcopy='xclip -selection clipboard'
}

el (( $+command[name] )) en las pruebas zsh si el comando "nombre" está instalado en su sistema, entonces ambos alias se agrupan con {}. la && es un AND binario, si a entonces b, por lo tanto, si tiene xclip, se establecerán los alias.

echo "another test" | tee >(pbcopy)

Para obtener el contenido de su portapapeles, simplemente escriba:

pbpaste | "any-command-you-need-here"

Respondido 22 ago 19, 12:08

Copie y pegue en el portapapeles en Windows (Cygwin):

Ver:

$ clip.exe -?

CLIP
Description:
    Redirects output of command line tools to the Windows clipboard.
    This text output can then be pasted into other programs.
Parameter List:
/?                  Displays this help message.
Examples:
DIR | CLIP          Places a copy of the current directory
                        listing into the Windows clipboard.
CLIP < README.TXT   Places a copy of the text from readme.txt
                        on to the Windows clipboard.

También getclip (se puede usar en lugar de cambio + Ins!) y putclip (echo oaeuoa | putclip.exe para ponerlo en clip) existen.

Respondido el 15 de enero de 20 a las 04:01

Este es un script de Python simple que hace exactamente lo que necesita:

#!/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())

Guarde esto como un ejecutable en algún lugar de su ruta (lo guardé en /usr/local/bin/clip. Puede canalizar cosas para guardarlas en su portapapeles ...

echo "Hello World" | clip

Y puede canalizar lo que está en su portapapeles a algún otro programa ...

clip | cowsay
 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Ejecutarlo por sí mismo simplemente mostrará lo que está en el portapapeles.

Respondido el 12 de Septiembre de 16 a las 22:09

Esto funciona cuando estás en una sola computadora, pero no te permitirá copiar cosas entre computadoras. - Carlos Plager

parece solo `echo str> tmpfile` y cat tmpfile , no la operación del portapapeles. // Igual que @horta responde. - Yurenchen

esto no parece establecer la variable del portapapeles, por lo que no puedo pegar el contenido en otra aplicación, ¡no es un portapapeles real! - jena

  xsel -b

Hace el trabajo para X Window, y en su mayoría ya está instalado. Una mirada a la página de manual de xsel Vale la pena el esfuerzo.

Respondido el 15 de enero de 20 a las 04:01

pbcopy está integrado en OSX:

Copiando el contenido de .bash_profile:

cat ~/.bash_profile | pbcopy

Respondido el 30 de enero de 20 a las 10:01

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

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

Incluye código fuente: cmd_clip.zip

Respondido el 12 de Septiembre de 16 a las 22:09

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

tmux

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

Para salir de este modo, presione q; para navegar, usa tu vim or emacs vinculante (predeterminado = vim), entonces hjkl para el movimiento, v/V/C-v para la selección de caracteres / líneas / bloques, etc. Cuando tenga su selección, presione Enviar 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 (algo así como también viene con ambos startx y xinit). La mayoría de las otras respuestas mencionan xclip, y me gusta mucho xsel por su brevedad, así que voy a cubrir xsel.

Desde xsel (1x):

Opciones de entrada

-a, --anexar

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

-f, - seguir

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

-i, --entrada

leer la entrada estándar en la selección.

Opciones de salida

-o, --salida

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

Opciones de acción

-c, --claro

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

-d, --eliminar

Solicite 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 elimine el contenido seleccionado. Anula todas las opciones de entrada.

Opciones de seleccion

-p, --primaria

operar en la selección PRIMARIO (predeterminado).

-s, --secundario

operar en la selección SECUNDARIA.

-b, - portapapeles

operar en la selección del PORTAPAPELES.

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

Ejemplo: digamos que quiero copiar la salida de foo desde un TTY y péguelo en una página web para obtener un informe de error. Para hacer esto, sería ideal copiar hacia / desde la sesión TTY / X. Entonces la pregunta es ¿Cómo accedo al portapapeles desde el 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 you puedo Ctrl-V en la forma habitual.

Ahora digamos que alguien en el sitio de soporte me da un comando para ejecutar y 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

Pedido de pizza parece un uso productivo de la línea de comandos.

...hacia adelante.

Empuje

Si se compila con +clipboard (¡Esto es importante! Revise su vim --version), Vim debería tener acceso a la X PRIMARY y CLIPBOARD trozos escogidos. Las dos selecciones son accesibles desde el * y + registros, respectivamente, y se puede escribir y leer en su tiempo libre al igual que 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 X, no es el fin del mundo. Puedes usar el xsel técnica como se describe en la última sección.

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

Ate un par de combinaciones de teclas y debería estar bien.

Respondido el 20 de junio de 20 a las 10:06

Definitivamente siempre recuerda usar DISPLAY= al llamar a una aplicación X desde un entorno no X. Las aplicaciones X necesitan DISPLAY variable de entorno para averiguar con qué servidor (¿o hay solo un servidor que maneja múltiples sesiones?) con el que están hablando. Intentar DISPLAY=:1 firefox (o cualquiera que sea su ID de pantalla; la mía resulta ser :1) desde un TTY, por ejemplo. - Braden mejor

Para mí, la elección en mi entorno fue :%y+ en VIM. - Hank Ca

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

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

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

Respondido el 23 de Septiembre de 17 a las 01:09

¿Cómo usaría esto? ¿Guardar el script en PATH y canalizarlo? Estoy tratando de escribir un contenedor cli de dropbox para copiar los enlaces para compartir, así que solo lo necesito para manejar el texto. - jena

En macOS, utilice pbpaste.

Por ejemplo:

Actualizar el portapapeles

pbpaste  | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy

Respondido el 15 de enero de 20 a las 04:01

Si es como yo y se ejecuta en un servidor Linux sin privilegios de root y no hay ninguno xclip or GPM podría solucionar este problema simplemente utilizando un archivo temporal. Por ejemplo:

$ echo "Hello, World!" > ~/clip
$ echo `cat ~/clip`
Hello, World!

Respondido el 15 de enero de 20 a las 16:01

No veo cómo la falta de privilegios de root influya en esto. - Braden mejor

@BradenBest La falta de privilegios de root significa que no pude instalar cosas. - jardín

Pero, ¿qué estarías instalando? ¿X? ¿En un servidor? A menos que esté alojando algún servicio de reenvío X extraño, no veo por qué querría hacer eso. - Braden mejor

@BradenBest No estoy seguro. Cualquier programa o servicio que me permita realizar una copia y pegado. - jardín

Bueno, si usa alguno de los X selections (que está necesariamente implícito en "portapapeles" y cualquier mención de xclip / xsel), necesita una sesión X activa (y por lo tanto un servidor X) para poder acceder a la selección en primer lugar. Para ver lo que quiero decir, intenta correr DISPLAY="" xsel en su máquina local. Saldrá en caso de error, no pudiendo encontrar la sesión. "", y no se realizará ninguna interacción con ninguna selección de X. Es por eso que inicialmente dije que no veo cómo influyen los privilegios de root en esto: root o sin root, no es probable que encuentre una selección X útil en un entorno de servidor. - Braden mejor

En Linux esto funciona:

cat filename | xclip

Respondido el 28 de enero de 20 a las 22:01

El delineador rubí me inspiró a probar con Python.

Digamos que queremos un comando que sangra lo que esté en el portapapeles con 4 espacios. Perfecto para compartir fragmentos en stackoverflow.

$ pbpaste | python -c "import sys
 for line in sys.stdin:
   print(f'    {line}')" | pbcopy

eso no es un error tipográfico. Python necesita nuevas líneas para hacer un bucle for. Queremos alterar las líneas en una pasada para evitar la creación de una matriz adicional en la memoria.

Si no le importa construir la matriz adicional, intente:

$ pbpaste | python -c "import sys; print(''.join([f'    {l}' for l in sys.stdin]))" | pbcopy

pero honestamente awk es mejor para esto que python. Definí este alias en mi ~/.bashrc presentar

alias indent="pbpaste | awk '{print \"    \"\$0}' | pbcopy"

ahora cuando corro indent lo que esté en mi portapapeles tiene sangría.

Respondido 17 Abr '20, 08:04

Puede simplemente soltar los corchetes y usar una expresión generadora en lugar de una lista de comprensión. ''.join(f' {l}' for l in sys.stdin) - también para la mayoría de la gente python apuntará a python2 en MacOS. Entonces, es posible que desee especificar python3 en lugar de. - sytech

en Wayland xcopy no parece funcionar, use wl-portapapeles en lugar de. por ejemplo, en fedora

sudo dnf install wl-clipboard

tree | wl-copy

wl-paste > file

Respondido 29 Abr '20, 13:04

acabo de buscar lo mismo en mi KDE ambiente. Siéntete libre de usar clipcopy y clippaste

Donde:

> echo "TEST CLIP FROM TERMINAL" | clipcopy 
> clippaste 
TEST CLIP FROM TERMINAL

Respondido 21 Oct 20, 14:10

Una forma de pegar desde el portapapeles al archivo sin ninguna herramienta excepto echo.

  1. Escape de las comillas simples en el texto que desea pegar: reemplace todas las apariciones de ' con '\'' y copie el resultado al portapapeles.
  2. Tipo echo -n '
  3. Prensa Shift+Insert
  4. Tipo ' > filename.txt
  5. Prensa Enter

Básicamente estás haciendo esto:

echo -n 'copied text with single quotes escaped' > filename.txt

Funciona incluso si el texto copiado tiene nuevas líneas.

respondido 25 nov., 20:16

Respondido 29 ago 16, 12:08

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

Ayer me encontré con la pregunta: "¿Cómo compartir el portapapeles entre diferentes sesiones de usuario?". Al cambiar entre sesiones con ctrlaltF7 - ctrlaltF8, de hecho, no puede pegar lo que ha copiado.

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

user1@host:~$ mkfifo /tmp/sharedClip

luego en la terminal de envío

user1@host:~$ cat > /tmp/sharedClip

por último, en la terminal receptora:

user2@host:~$ cat /tmp/sharedClip

Ahora, escribe o pega cualquier cosa en la primera terminal y (después de presionar retorno), aparecerá inmediatamente en el terminal receptor, desde donde podrás Copiar / Pegar de nuevo donde quieras.

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

Respondido 07 Oct 16, 13:10

No parece demasiado sorprendente. Dos servidores X diferentes = dos conjuntos de selección diferentes. Sin embargo, tu podría configurar un script que tome entrada / salida a través de xsel/xclip. Por ejemplo, un extremo escucha para ver si alguna de las selecciones cambió y luego lo canaliza automáticamente (a través del nombre FIFO) al otro script, que está escuchando uno o más canales, que lo inserta en su propia selección X. La copia de texto daría como resultado automáticamente que el mismo texto apareciera en la selección de la otra sesión X. Y no te olvides de $DISPLAY. - Braden mejor

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.