¿Qué es pbcopy de OSX para Linux?

141

En un terminal en OSX puedo canalizar la salida a pbcopy y luego ir a un navegador web y pegarlo. Intenté esto en Linux con xcopy, pero cuando cambio al navegador, simplemente sobrescribe el portapapeles con lo que había en él la última vez que se utilizó el navegador. ¿Qué funciona como pbcopy en Linux?

tony_sid
fuente
2
... y para aquellos que no saben qué es pbcopy, aquí está la página de manual developer.apple.com/library/mac/#documentation/Darwin/Reference/…
Rob Cowell
Una herramienta que puede ser útil con esto es ClipIt (y administradores de portapapeles similares). No solo funciona bien en la terminal, sino que también conserva el historial del portapapeles. Bastante útil.
brandizzi

Respuestas:

162

Si tienes X instalado, puedes probar xsel de esta manera:

alias pbcopy='xsel --clipboard --input'
alias pbpaste='xsel --clipboard --output'

o con xclip:

alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'

ahora puedes usarlos:

echo 'go to my clipboard' | pbcopy

cuando no tengo XI uso la funcionalidad GNU Screen para copiar entre shells abiertos en una sesión usando el teclado

copiar : Ctrl-a -> Esc -> go to wanted position * -> Space (to begin selecting) -> press k to go forward mark text -> Enter

pegar : Ctrl-a + ]

* los movimientos se realizan con vim como combinaciones de teclas (j, k, l & m).

amized
fuente
1
Gracias, esta es exactamente la información que quería. Aunque ahora me pregunto si hay una manera de hacer que Screen me permita usar los comandos de Emacs para seleccionar el área que quiero copiar ...
Noah Sussman
8
xsel: No se puede abrir la pantalla: (nulo): ioctl inadecuado para el dispositivo
itsazzad
Resolví el problema "No se puede abrir la pantalla" en Windows instalando Xming y configurando DISPLAY =: 0
scottgwald
1
Para los usuarios de tmux, es más como Ctrl-b, [ -> go to position -> Space -> select texts -> Entery pegar porCtrl-b, ]
elquimista
Siempre que sea posible, si esto es algo permanente que desea, por supuesto, en lugar de complicar su espacio de nombres con alias en su perfil, será mejor crear un script básico para esto /bin/. Especialmente si comparte su perfil entre máquinas macOS y Linux.
Benjamin R
9

Ponga un script como este llamado pbcopy en su carpeta bin:

#!/bin/bash
xclip -i -sel c -f |xclip -i -sel p

Esto pondrá STDIN tanto en el búfer de selección como en el portapapeles:

echo Hello world |pbcopy
Erik
fuente
¿Por qué sería catnecesario? ¿No solo redirigirá stdin a stdout en este caso, por lo tanto, abuso de gato inútil o me estoy perdiendo algo?
Hultner
2
Tienes razón, parece un abuso inútil del gato :-)
Erik
2
si (como yo) se pregunta dónde está el misterioso "gato inútil", la edición lo ha eliminado. NTS: en caso de comentarios confusos, verifique el historial ^^ '
yaitloutou
¿Cómo se pega el contenido después de usar esto? Solo uso xclip -o? ¿O hay un mejor camino?
n1k31t4
@ n1k31t4 Lo que hice fue crear un script equivalente usando xclip -sel c -opara un script en /bin/pbpaste.
Benjamin R
5

Ampliar las soluciones de @Erik y @xpixelz; Estos dos scripts deberían funcionar en ambas plataformas:

pbcopy:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  cat | /usr/bin/pbcopy
else
  # copy to selection buffer AND clipboard
  cat | xclip -i -sel c -f | xclip -i -sel p
fi

pbpaste:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  /usr/bin/pbpaste
else
  xclip -selection clipboard -o
fi
Wes Turner
fuente
Pero, ¿por qué incluso tendría este script en OS X, donde es parte de la tierra de usuarios nativa?
Hultner
* como referencia para una funcionalidad similar, * archivos de puntos multiplataforma: github.com/westurner/dotfiles/blob/develop/scripts/pbcopy
Wes Turner
¿Todavía maltrato de gatos y por qué no verificar si xclip existe y asignar un alias si es así? O compruebe si el binario pbpaste existe también sería una opción. Revisar la uname parece un enfoque extraño para el problema.
Hultner
2
@Hultner "Verificar la uname parece un enfoque extraño para el problema" También podría verificar los binarios, preferentemente, en orden, por excepción con una ${a:-${b:-${c:+${d}}}}y algunas type -P/ hasvariables asignaciones y / bin / test execs.
Wes Turner
2

Esta respuesta se refiere al subsistema Linux para Windows.

Respuesta corta: úsela clip.execomo si fuera pbcopypara poner algo en el portapapeles de Windows. Es magia. Ejemplo echo "Hello Windows" | clip.exeen su bash o terminal de Ubuntu bash, y luego 'ctrl-v' en un programa de Windows.

Más contexto:

En un comentario anterior he mencionado que, cuando se utiliza Xming en Windows para habilitar esta funcionalidad, es necesario establecer una variable DISPLAY ( export DISPLAY=:0en muchos casos) antes de la xsely xclipel trabajo soluciones. Exasperantemente, esta solución funciona de una manera poco confiable y estocástica: al pegar de Linux a Windows, presionar ctrl-ventre una y diez veces hace que se pegue el portapapeles (una vez) (esto está en mi Windows 10 Surface Book 2). No pierdas tu tiempo, usa clip.exe.

NOTA: No olvides el .exe. De lo contrario, Ubuntu bash le sugerirá que instale el paquete de Linux geomview, que no es lo que desea.

scottgwald
fuente