Como é o pbcopy do OSX para Linux

141

Em um terminal no OSX, posso canalizar a saída para o pbcopy e, em seguida, entrar em um navegador da web e colá-lo. Eu tentei isso no Linux com o xcopy, mas quando mudo para o navegador, ele simplesmente sobrescreve a área de transferência com o que estiver nele na última vez em que o navegador foi usado. O que funciona como pbcopy no Linux?

tony_sid
fonte
2
... e para aqueles que não sabem o que pbcopy é, aqui está a página homem developer.apple.com/library/mac/#documentation/Darwin/Reference/...
Rob Cowell
Uma ferramenta que pode ser útil com isso é o ClipIt (e gerenciadores de área de transferência semelhantes). Ele não apenas funciona bem no terminal, mas também preserva o histórico da área de transferência. Bem útil.
Brandizzi

Respostas:

162

Se você possui o X instalado, tente o xsel desta maneira:

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

ou com xclip:

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

agora você pode usá-los:

echo 'go to my clipboard' | pbcopy

quando não tenho o XI, uso a funcionalidade GNU Screen para copiar entre as conchas abertas em uma sessão usando o teclado

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

colar : Ctrl-a + ]

* movimentos são feitos com o vim, como teclas de atalho (j, k, l & m).

amized
fonte
1
Obrigado, esta é exatamente a informação que eu queria. Tho agora eu me pergunto se existe uma maneira que eu poderia fazer a tela, deixe-me usar comandos de Emacs para selecionar a área que deseja copiar ...
Noah Sussman
8
xsel: Não é possível abrir a tela: (nulo): ioctl inadequado para dispositivo
itsazzad 24/12/15
Resolvi o problema "Não é possível abrir a tela" no Windows instalando o Xming e configurando DISPLAY =: 0
scottgwald
1
Para usuários do tmux, é mais parecido Ctrl-b, [ -> go to position -> Space -> select texts -> Entere colado porCtrl-b, ]
el que m'est
Sempre que possível - se é algo permanente que você deseja, é claro - em vez de complicar o espaço para nome com alias no seu perfil, será melhor criar um script básico para isso /bin/. Especialmente se você compartilhar seu perfil entre máquinas macOS e linux.
Benjamin R
9

Coloque um script como este chamado pbcopy na sua pasta bin:

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

Isso colocará o STDIN no buffer de seleção e na área de transferência:

echo Hello world |pbcopy
Erik
fonte
Por que isso seria catnecessário? Não apenas redirecionará stdin para stdout neste caso, portanto, abuso de gato inútil ou estou perdendo alguma coisa?
Hultner
2
Você está certo parece como :-) abuso gato inútil
Erik
2
se você (como eu) está se perguntando onde está o misterioso "gato inútil", ele foi removido pela edição. NTS: em caso de comentários confusos, verifique o histórico ^^ '
yaitloutou 31/01
Como você cola o conteúdo depois de usá-lo? Apenas usando xclip -o? Ou há um jeito melhor?
N1k31t4 4/17
@ n1k31t4 O que fiz foi criar um script equivalente usando xclip -sel c -opara um script em /bin/pbpaste.
Benjamin R
5

Expandir as soluções de @Erik e @xpixelz; esses dois scripts devem funcionar nas duas 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
fonte
Mas por que você teria esse script no OS X, onde faz parte da terra do usuário nativo?
Hultner 21/05
* Como uma referência para a funcionalidade semelhante, * dotfiles entre plataformas: github.com/westurner/dotfiles/blob/develop/scripts/pbcopy
Wes Turner
Ainda assim, abuso de gato e por que não verificar se o xclip existe e atribuir um alias, se existir? Ou verifique se o binário pbpaste existe também seria uma opção. Verificar o uname parece uma abordagem estranha para o problema.
Hultner 29/05
2
@Hultner "Verificar a uname parece uma abordagem estranha para o problema" Você também pode procurar por binários, preferencialmente, em ordem, por exceção de ${a:-${b:-${c:+${d}}}}algumas atribuições type -P/ hasvariáveis ​​e / / bin / test execs.
Wes Turner
2

Esta resposta refere-se ao subsistema Linux para Windows.

Resposta curta: use clip.execomo se fosse pbcopypara colocar algo na área de transferência do Windows. É Magica. Exemplo echo "Hello Windows" | clip.exeem seu terminal bash ou Ubuntu bash e, em seguida, `ctrl-v 'em um programa do Windows.

Mais contexto:

Em um comentário acima , mencionei que, ao usar o Xming no Windows para habilitar essa funcionalidade, é necessário definir uma variável DISPLAY ( export DISPLAY=:0, em muitos casos) antes que as soluções xsele xclipfuncionem. É irritante que essa solução funcione de maneira estocástica e não confiável - ao colar do Linux para o Windows, pressionar ctrl-ventre uma e dez vezes faz com que a área de transferência seja colada (uma vez) (isso está no meu Windows 10 Surface Book 2). Não perca seu tempo, use clip.exe.

NOTA: Não esqueça o .exe. Caso contrário, o Ubuntu bash sugerirá que você instale o pacote Linux geomview, que não é o que você deseja.

scottgwald
fonte