Seperti apa pbcopy OSX untuk Linux

141

Dalam terminal di OSX saya dapat mem-pipe output ke pbcopy dan kemudian masuk ke browser web dan menempelkannya. Saya mencoba ini di Linux dengan xcopy tetapi ketika saya beralih ke browser itu hanya menimpa clipboard dengan apa pun yang ada di dalamnya terakhir kali browser digunakan. Apa yang berfungsi seperti pbcopy di Linux?

tony_sid
sumber
2
... dan bagi mereka yang tidak tahu apa itu pbcopy, inilah pengembang
Rob Cowell
Alat yang dapat membantu dengan ini adalah ClipIt (dan manajer clipboard serupa). Tidak hanya itu berfungsi dengan baik di terminal, itu juga mempertahankan sejarah clipboard. Cukup berguna.
brandizzi

Jawaban:

162

jika Anda telah menginstal X Anda dapat mencoba xsel dengan cara ini:

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

atau dengan xclip:

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

sekarang Anda dapat menggunakan mereka:

echo 'go to my clipboard' | pbcopy

ketika saya tidak memiliki XI gunakan fungsi Layar GNU untuk menyalin di antara shell yang terbuka dalam sesi menggunakan keyboard

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

untuk menempel: Ctrl-a + ]

* Gerakan dilakukan dengan vim seperti binding kunci (j, k, l & m).

marah
sumber
1
Terima kasih, inilah informasi yang saya inginkan. Tho sekarang saya bertanya-tanya apakah ada cara saya bisa membuat Layar biarkan saya menggunakan perintah Emacs untuk memilih area yang ingin saya salin ...
Noah Sussman
8
xsel: Tidak dapat membuka layar: (null): ioctl yang tidak pantas untuk perangkat
itsazzad
Saya memecahkan masalah "Can't open display" pada Windows dengan menginstal Xming dan mengatur DISPLAY =: 0
scottgwald
1
Untuk pengguna tmux, ini lebih seperti Ctrl-b, [ -> go to position -> Space -> select texts -> Enterdan menempelkan olehCtrl-b, ]
el que m'est
Kapan saja — jika ini adalah sesuatu yang permanen yang Anda inginkan, tentu saja — daripada mempersulit ruang nama Anda dengan alias di profil Anda, akan lebih baik untuk membuat skrip dasar untuk ini pada /bin/. Terutama jika Anda membagikan profil Anda antara mesin macOS dan linux.
Benjamin R
9

Letakkan skrip seperti ini yang disebut pbcopy di folder bin Anda:

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

Ini akan menempatkan STDIN di buffer pilihan dan clipboard Anda:

echo Hello world |pbcopy
Erik
sumber
Mengapa catdibutuhkan? Bukankah itu hanya mengarahkan stdin ke stdout dalam kasus ini sehingga penyalahgunaan kucing tidak berguna atau apakah saya kehilangan sesuatu?
Hultner
2
Anda benar itu memang tampak seperti penyalahgunaan kucing tidak berguna :-)
Erik
2
jika Anda (seperti saya) bertanya-tanya di mana "kucing tak berguna" yang misterius itu, ia telah dihapus oleh hasil edit. NTS: jika ada komentar yang membingungkan, periksa sejarahnya ^^ '
yaitloutou
Bagaimana Anda menempelkan konten setelah menggunakan ini? Hanya menggunakan xclip -o? Atau ada cara yang lebih baik?
n1k31t4
@ n1k31t4 Apa yang saya lakukan adalah membuat skrip yang setara dengan menggunakan xclip -sel c -oskrip di /bin/pbpaste.
Benjamin R
5

Untuk memperluas solusi @Erik dan @xpixelz; kedua skrip ini harus bekerja pada kedua platform:

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
sumber
Tetapi mengapa Anda bahkan memiliki skrip ini di OS X di mana itu adalah bagian dari tanah pengguna asli?
Hultner
* sebagai referensi untuk fungsionalitas yang serupa, * dotfil
Wes Turner
Masih menggunakan kucing dan mengapa tidak memeriksa apakah xclip ada sebagai gantinya dan menetapkan alias jika ya? Atau periksa apakah biner pbpaste ada juga akan menjadi pilihan. Memeriksa uname sepertinya pendekatan yang aneh untuk masalah tersebut.
Hultner
2
@Hultner "Memeriksa nama yang nampaknya seperti pendekatan aneh untuk masalah" Anda juga bisa memeriksa biner, terutama, dalam urutan, dengan pengecualian dengan ${a:-${b:-${c:+${d}}}}dan type -P/ hastugas variabel / dan eksekutif / bin / test.
Wes Turner
2

Jawaban ini merujuk pada Subsistem Linux untuk Windows.

Jawaban singkat: gunakan clip.exeseolah-olah pbcopyuntuk meletakkan sesuatu di papan klip Windows. Itu ajaib. Contoh echo "Hello Windows" | clip.exedi terminal bash atau Ubuntu bash Anda, dan kemudian `ctrl-v 'dalam program Windows.

Lebih banyak konteks:

Dalam komentar di atas saya sebutkan bahwa, ketika menggunakan Xming pada Windows untuk mengaktifkan fungsionalitas ini, perlu untuk mengatur variabel DISPLAY ( export DISPLAY=:0, dalam banyak kasus) sebelum xseldan xclipsolusi bekerja. Anehnya, solusi ini bekerja dengan cara stokastik yang tidak dapat diandalkan - ketika menempelkan dari Linux ke Windows, menekan ctrl-vantara satu dan sepuluh kali menyebabkan clipboard untuk ditempelkan (satu kali) (ini ada di Windows 10 Surface Book 2). Jangan buang waktu Anda, gunakan clip.exe.

CATATAN: Jangan lupakan .exe. Kalau tidak, Ubuntu bash akan menyarankan Anda menginstal paket Linux geomview, yang bukan yang Anda inginkan.

scottgwald
sumber