Com'è la pbcopy di OSX per Linux


141

In un terminale in OSX posso reindirizzare l'output su pbcopy e quindi andare in un browser Web e incollarlo. Ho provato questo in Linux con xcopy ma quando passo al browser sovrascrive gli appunti con qualsiasi cosa fosse presente l'ultima volta che il browser è stato usato. Cosa funziona come pbcopy in Linux?


2
... e per coloro che non sanno cosa sia pbcopy, ecco la pagina man developer.apple.com/library/mac/#documentation/Darwin/Reference/…
Rob Cowell,

Uno strumento che può essere utile con questo è ClipIt (e gestori di appunti simili). Non solo gioca bene nel terminale, ma conserva anche la cronologia degli appunti. Abbastanza utile
brandizzi il

Risposte:


162

se hai installato X puoi provare xsel in questo modo:

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

o con xclip:

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

ora puoi usarli:

echo 'go to my clipboard' | pbcopy

quando non ho XI uso la funzionalità GNU Screen per copiare tra shell aperte in una sessione usando la tastiera

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

incollare : Ctrl-a + ]

* i movimenti sono fatti con tasti come i tasti (j, k, l & m).


1
Grazie, sono esattamente queste le informazioni che volevo. Quindi ora mi chiedo se c'è un modo in cui posso fare Screen permettimi di usare i comandi Emacs per selezionare l'area che voglio copiare ...
Noah Sussman

8
xsel: Impossibile aprire il display: (null): ioctl inappropriato per il dispositivo
itsazzad

Ho risolto il problema "Impossibile aprire il display" su Windows installando Xming e impostando DISPLAY =: 0
scottgwald

1
Per gli utenti di tmux, è più simile Ctrl-b, [ -> go to position -> Space -> select texts -> Entere incollato daCtrl-b, ]
elquimista

Ogni volta che è possibile, se questo è qualcosa di permanente che vuoi, ovviamente, piuttosto che complicare il tuo spazio dei nomi con l'aliasing nel tuo profilo, sarà meglio creare uno script di base per questo /bin/. Soprattutto se condividi il tuo profilo tra macOS e macchine linux.
Benjamin R

9

Inserisci uno script come questo chiamato pbcopy nella tua cartella bin:

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

Ciò inserirà STDIN sia nel buffer di selezione che negli Appunti:

echo Hello world |pbcopy

Perché sarebbe catnecessario? In questo caso non reindirizzerà semplicemente lo stdin allo stdout, quindi inutili abusi sui gatti o mi sto perdendo qualcosa?
Hultner,

2
Hai ragione sembra un inutile abuso di gatto :-)
Erik

2
se ti stai chiedendo (come me) dov'è il misterioso "gatto inutile", è stato rimosso dalla modifica. NTS: in caso di commenti confusi, controlla la cronologia ^^ '
yaitloutou

Come si incolla il contenuto dopo averlo usato? Stai solo usando xclip -o? O c'è un modo migliore?
n1k31t4,

@ n1k31t4 Quello che ho fatto è stato creare uno script equivalente usando xclip -sel c -oper uno script su /bin/pbpaste.
Benjamin R

5

Ampliare le soluzioni di @Erik e @xpixelz; questi due script dovrebbero funzionare su entrambe le piattaforme:

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

Ma perché dovresti anche avere questo script su OS X in cui fa parte dell'area utente nativa?
Hultner,

* come riferimento per funzionalità simili, * dotfile multipiattaforma: github.com/westurner/dotfiles/blob/develop/scripts/pbcopy
Wes Turner

Ancora abusi sui gatti e perché non controllare se esiste invece xclip e assegnare un alias se lo fa? Oppure controlla se esiste il binario pbpaste sarebbe anche un'opzione. Controllare l'igname sembra un approccio strano al problema.
Hultner,

2
@Hultner "Il controllo di uname sembra un approccio strano al problema" Si potrebbe anche verificare la presenza di binari, preferibilmente, in ordine, con un'eccezione con un ${a:-${b:-${c:+${d}}}}e alcune type -P/ hasvariabili assegnazioni e / bin / test exec.
Wes Turner,

2

Questa risposta si riferisce al sottosistema Linux per Windows.

Risposta breve: usa clip.execome se fosse pbcopyper mettere qualcosa negli appunti di Windows. È magico. Esempio echo "Hello Windows" | clip.exenel tuo bash o nel terminale bash di Ubuntu, quindi `ctrl-v 'in un programma Windows.

Più contesto:

In un commento sopra ho menzionato che, quando si utilizza Xming su Windows per abilitare questa funzionalità, è necessario impostare una variabile DISPLAY ( export DISPLAY=:0, in molti casi) prima che le soluzioni xsele xclipfunzionino. Furiosamente, questa soluzione funziona in modo inaffidabile e stocastico - quando si incolla da Linux a Windows, premendo ctrl-vtra una e dieci volte si fa incollare gli appunti (una volta) (questo è sul mio Windows 10 Surface Book 2). Non perdere tempo, usa clip.exe.

NOTA: non dimenticare il .exe. Altrimenti Ubuntu bash suggerirà di installare il pacchetto Linux geomview, che non è quello che vuoi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.