Pipa ke / dari clipboard dalam skrip Bash

946

Apakah mungkin untuk menyalurkan ke / dari clipboard di Bash?

Apakah itu pemipaan ke / dari gagang perangkat atau menggunakan aplikasi tambahan, saya tidak dapat menemukan apa pun.

Misalnya, jika /dev/clipperangkat yang terhubung ke clipboard bisa kita lakukan:

cat /dev/clip        # Dump the contents of the clipboard
cat foo > /dev/clip  # Dump the contents of "foo" into the clipboard
moinudin
sumber
3
Saya telah menggunakan :%y+vim, yang merupakan vim-speak untuk "yank (copy) semua baris ke register '+' ( PRIMARYpapan klip X )". Anda dapat mengganti %dengan rentang jika Anda ingin spesifik. Tetapi ada tiga peringatan: 1. Sekarang, Anda harus menyimpan teks apa pun ke file sebelum dapat menyalinnya. Ini berbeda dengan xclipperintah yang disebutkan dalam jawaban. 2. Jika Anda belum tahu cara melakukannya, ini mungkin membosankan. 3. Anda hanya dapat melakukan ini jika fitur tertentu diaktifkan saat mengkompilasi vim. Jika Anda menginstal GVim, itu harus diaktifkan secara default di GUI dan terminal vim.
Braden Best
1
@BradenBest Anda harus memasukkan ini sebagai jawaban. Saya berada di lingkungan NIX dan tidak dapat menginstal xclip. Jawaban Anda bekerja seperti mantra.
HankCa
@HankCa Oke, saya mengirim jawaban . Katakan padaku apa yang kau pikirkan.
Braden Best
@BradenBest jawaban yang sangat komprehensif. Saya hanya menyukai yang :%y+satu tapi ok, semua pangkalan Anda tertutup! Bagus
HankCa
Pilihan lain: menggunakan skrip perl kecil: tidak perlu instalasi. Lihat jawaban saya di bawah ini .
VonC

Jawaban:

863

Ada banyak clipboard yang bisa Anda tangani. Saya berharap Anda mungkin adalah pengguna Linux yang ingin meletakkan barang di clipboard utama X Windows. Biasanya, papan klip yang ingin Anda ajak bicara memiliki utilitas yang memungkinkan Anda berbicara dengannya.

Dalam kasus X, ada xclip(dan lainnya). xclip -selection cakan mengirim data ke clipboard yang berfungsi dengan Ctrl + C, Ctrl + Vdi sebagian besar aplikasi.

Jika Anda menggunakan Mac OS X, ada pbcopy.

Jika Anda berada dalam mode terminal Linux (tanpa X) maka lihat ke dalam gpmatau layar yang memiliki clipboard. Coba screenperintahnya readreg.

Di bawah Windows 10+ atau cygwin, gunakan /dev/clipboardatau clip.

lununath
sumber
36
cygwin: / dev / clipboard
glenn jackman
24
pada Windows, /dev/clipboardjuga berfungsi untuk shell bash Msys / MinGW
Mihai Rotaru
71
Catatan yang xclip -selection cakan mengirim data ke clipboard yang berfungsi dengan ^ C, ^ V di sebagian besar aplikasi
Klaas van Schelven
31
pada versi windows yang lebih baru Anda dapat menggunakan clipseperti ini:dir | clip
maep
11
Sangat menyedihkan bahwa GNU / Linux tidak memiliki perangkat seperti itu /dev/clipboard, dan memaksa untuk menginstal xclip baik gpm yang hilang secara default setidaknya di Kubuntu (saya kira di sebagian besar distro lain juga) .
Hi-Angel
282

Pastikan Anda menggunakan alias xclip="xclip -selection c" sebaliknya Anda tidak bisa menggunakan Ctrl+ vuntuk menempelkannya kembali di tempat yang berbeda.

echo test | xclip    

Ctrl+v === test

doug
sumber
1
Bagaimana cara menempelkannya tanpa argumen perintah itu?
Jonah
15
xclip -selection clipboard -o
doug
32
karena saya bolak-balik antara osx dan linux banyak saya memiliki yang berikut di dotfiles saya. alias pbcopy="xclip -selection c" alias pbpaste="xclip -selection clipboard -o" Semoga itu bisa membantu.
doug
15
@ ApockofFork, xcliptidak menambahkan baris baru, echoadalah. Coba printf test | xclip -i -selection clipboard. ( printftidak menambahkan baris baru kecuali jika Anda menulis 'test\n'.)
David X
7
Atau gunakan echo -nsebagai ganti printf.
Christian Pietsch
182

Install

# You can install xclip using `apt-get`
apt-get install xclip

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

Jika Anda tidak memiliki akses ke apt-getatau pacman, juga dnf, sumber tersedia di sourceforge .

Mendirikan

Pesta

Di ~/.bash_aliases, tambahkan:

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

Jangan lupa memuat konfigurasi baru Anda menggunakan . ~/.bash_aliasesatau dengan memulai kembali profil Anda.

Ikan

Di ~/.config/fish/config.fish, tambahkan:

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

Jangan lupa untuk me-restart instance ikan Anda dengan me-restart terminal Anda agar perubahan diterapkan.

Pemakaian

Anda sekarang dapat menggunakan setclipdan getclip, misalnya:

$ echo foo | setclip
$ getclip
foo
tleb
sumber
3
Untuk semua distro lainnya: Anda dapat mengunduh sumber dari sourceforge.net/projects/xclip
Scz
+1 Solusi terbaik! Di Arch sudo pacman -S xclip,. Namun perlu diketahui bahwa .bashrcitu bukan tempat terbaik. Saya merekomendasikan agar pengguna membaca di bashrc, bash_aliases dan .profile file yang tepat dan bagaimana bash menangani masing-masing. Kiat: letakkan di .bash_aliases sebagai gantinya.
eduncan911
1
Terima kasih @ eduncan911! :) Menambahkan opsi menggunakan pacmanmanajer paket dan menghapus .bashrcproposisi. Saya tahu .bash_aliaseslebih disesuaikan, tetapi hasil akhirnya sama ( .bashrchanya membutuhkan .bash_aliasesjika ada). Jika orang menginginkan sistem yang berantakan, biarkan mereka memilikinya. :)
tleb
@EladTabak Senang itu membantu.
tleb
1
@jpa Anda benar. .bashrcsumber saya .bash_aliasesdi akhir. ;) Saya mengikuti konvensi lama ini, yang tetap 100% kompatibel di Arch, Ubuntu / Debian, varian Raspberry, macOS / OSX dan Windows Bash: stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff Dengan konvensi itu, saya menggunakan dotfiles yang sama persis di semua mesin. Saya menyentuh. Cukup bagus: github.com/eduncan911/dotfiles
eduncan911
143

Di macOS, gunakan perintah pbcopydan built-in pbpaste.

Misalnya, jika Anda menjalankan

cat ~/.bashrc | pbcopy

isi ~/.bashrcfile akan tersedia untuk ditempelkan dengan Cmd+ vshortcut.

Jtruelove
sumber
37

Mencoba

xclip

xclip - command line interface to X selections (clipboard) 

pria

Sakit kepala
sumber
25

xsel pada 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

Install

sudo apt-get install xsel
Andrew_1510
sumber
Bagaimana ini berbeda echo "foo" | xclip -selection c?
Léo Léopold Hertz 준영
Ada beberapa jawaban untuk ini. Tanyakan jawaban Ubuntu , tetapi sebagian besar xseldan xclipsama dalam segala hal kecuali yang xclipdapat membaca / menulis file dengan nama, tetapi xselmemerlukan pengalihan shell jika Anda ingin mengakses file.
Colin D Bennett
xselberfungsi dengan baik dari skrip, sementara xclip hanya berfungsi dari prompt. Tidak yakin kenapa.
NVRM
16

Wow, saya tidak percaya ada berapa banyak jawaban untuk pertanyaan ini. Saya tidak bisa mengatakan saya sudah mencoba semuanya tetapi saya sudah mencoba 3 atau 4 teratas dan tidak ada yang bekerja untuk saya. Apa yang berhasil bagi saya adalah jawaban yang terletak di salah satu komentar yang ditulis oleh pengguna bernama doug. Karena saya merasa sangat membantu, saya memutuskan untuk menyatakan kembali dalam jawaban.

Instal utilitas xcopy dan ketika Anda berada di Terminal, masukan:

Salinan

Thing_you_want_to_copy|xclip -selection c

Tempel

myvariable=$(xclip -selection clipboard -o)

Saya perhatikan banyak jawaban yang direkomendasikan pbpaste dan pbcopy. Jika Anda ke utilitas itu tetapi karena alasan tertentu tidak tersedia pada repo Anda, Anda selalu dapat membuat alias untuk perintah xcopy dan menyebutnya pbpaste dan pbcopy.

alias pbcopy="xclip -selection c" 
alias pbpaste="xclip -selection clipboard -o" 

Maka akan terlihat seperti ini:

Thing_you_want_to_copy|pbcopy
myvariable=$(pbpaste)
aturan kebun
sumber
Hebat, bagian alias Anda sangat cocok dengan MacOS.
MeadowMuffins
15

2018 menjawab

Gunakan clipboard-cli . Ini bekerja dengan macOS, Windows, Linux, OpenBSD, FreeBSD, dan Android tanpa masalah nyata.

Instal dengan:

npm install -g clipboard-cli

Maka Anda bisa melakukannya

echo foo | clipboard

Jika Anda ingin, Anda dapat alias untuk cbdengan menempatkan berikut di Anda .bashrc, .bash_profileatau .zshrc:

alias cb=clipboard

Evan Conrad
sumber
2
Apakah Anda yakin itu npmpaket yang aman ?
Johnny
3
@Stas, saya berharap begitu, itu dibuat oleh Sindresorhus ( github.com/sindresorhus ), kontributor simpul paling produktif. Dia bertanggung jawab untuk perpustakaan pengujian Ava, xo linter, Yeoman, dan banyak proyek lainnya. Dia juga bertanggung jawab atas perpustakaan kecil yang tak terhitung jumlahnya seperti ini, yang secara kolektif menempatkan kodenya di hampir setiap situs web yang menggunakan JS di internet. Itu tidak berarti dia tidak bisa dikompromikan; Hanya saja jumlah mata pada repo dan reputasinya sendiri membuatnya jauh lebih kecil daripada kebanyakan repositori npm acak.
Evan Conrad
Keren! Bekerja pada Ubuntu GNU / Linux di mana xclip tidak berfungsi.
Kevin Buchs
14

Pada subsistem Windows untuk Linux Anda dapat menyalin ke clipboard dengan clip.exe.

cat file | clip.exe

Ingatlah untuk menggunakan |perintah pipa. Dan bukan >perintah, karena itu tidak akan berhasil.

pengetahuan adalah kekuatan
sumber
11

Berikut ini adalah skrip bash yang siap digunakan untuk membaca clipboard yang berfungsi pada banyak platform. Harap edit skrip di sini jika Anda menambahkan fungsionalitas (mis. Lebih banyak platform).

#!/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
Wolfgang Fahl
sumber
bruhh, ini benar-benar berfungsi mengapa bukankah ini jawabannya?
255.tar.xz
9

Di Windows (dengan Cygwin) coba cat /dev/clipboardatau echo "foo" > /dev/clipboardseperti yang disebutkan dalam artikel ini .

Norman H.
sumber
1
Seperti yang disebutkan pengguna @maep dalam komentar terpisah, versi Windows yang lebih baru (saya hanya dapat mengkonfirmasi untuk Win10) dapat dengan mudah disalurkan ke clip. Saya menggunakan msysgit 1.9.5 dan ini berhasil.
Shawn Erquhart
echo "foo" > /dev/clipboardtampaknya menghancurkan baris baru sepenuhnya (bukan sesuatu tetapi sepenuhnya hilang)
user1529413
9

Hanya untuk Mac:

echo "Hello World" | pbcopy
pbpaste

Ini terletak /usr/bin/pbcopydan /usr/bin/pbpaste.

nyitguy
sumber
8

Ada clipboard yang berbeda di Linux; server X memiliki satu, manajer jendela mungkin memiliki yang lain, dll. Tidak ada perangkat standar.

Oh, ya, pada CLI, program layar memiliki clipboard sendiri juga, seperti halnya beberapa aplikasi lain seperti Emacs dan vi .

Di X, Anda bisa menggunakan xclip .

Anda dapat memeriksa utas ini untuk kemungkinan jawaban lain: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html

Sunny Milenov
sumber
2
Sepertinya membuat / dev / clip akan menjadi proyek yang bagus untuk seseorang.
TED
2
Saya sangat menyadari beberapa clipboard. Bagaimana ini membuat pertanyaan saya semakin sulit dijawab?
moinudin
Masuk akal jika clipboard distandarisasi, mungkin tidak ada salahnya jika Anda dapat menggunakan / dev / clip1, / ​​dev / clip2 .. / dev / clip <n> untuk mengaksesnya, satu-satunya masalah adalah bahwa mereka adalah spesifik pengguna dan perangkat di seluruh sistem. Tetapi jika Anda membuat driver perangkat kernel yang menutupi sesuai dengan mengakses UID, itu harus berfungsi seperti yang diharapkan.
5

Salin dan tempel ke papan klip di Windows (Cygwin):

Lihat:

$ 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.

Juga getclip (dapat digunakan sebagai ganti Shift+ Ins!) Dan putclip (echo oaeuoa | putclip.exe untuk memasukkannya ke dalam klip) ada.

Stenemo
sumber
4

Ini adalah skrip Python sederhana yang melakukan apa yang Anda butuhkan:

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

Simpan ini sebagai yang dapat dieksekusi di suatu tempat di jalur Anda (saya menyimpannya /usr/local/bin/clip. Anda dapat menyalurkan barang untuk disimpan ke papan klip ...

echo "Hello World" | clip

Dan Anda dapat menyalurkan apa yang ada di clipboard Anda ke beberapa program lain ...

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

Menjalankannya dengan sendirinya hanya akan menampilkan apa yang ada di clipboard.

tweweat
sumber
Ini berfungsi saat Anda menggunakan satu komputer, tetapi tidak memungkinkan Anda untuk menyalin berbagai hal di antara komputer.
Charles Plager
tampaknya hanya `echo str> tmpfile` dan cat tmpfile, bukan operasi clipboard. // sama dengan jawaban @horta.
yurenchen
ini sepertinya tidak mengatur variabel clipboard, jadi saya tidak bisa menempelkan konten di aplikasi lain - ini bukan clipboard nyata!
jena
4

Saya telah menemukan referensi yang bagus: /unix/69111/

Dalam kasus saya, saya ingin menempelkan konten di clipboard dan juga untuk melihat apa yang telah disisipkan di sana, jadi saya juga menggunakan teeperintah dengan deskriptor file:

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

>()adalah bentuk proses substitusi. bash menggantikan masing-masing dengan path ke deskriptor file yang terhubung ke input standar program dalam tanda kurung.

The teeperintah garpu perintah Anda memungkinkan Anda untuk "pipa isinya" dan lihat hasilnya di output standar "stdout"

Anda juga dapat membuat alias untuk mendapatkan dan menulis di clipboard, memungkinkan Anda untuk menggunakan "pbcopy" dan "pbpaste" seolah-olah Anda berada di MAC. Dalam kasus saya, ketika saya menggunakan zsh saya memilikinya di file alias saya:

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

yang (( $+command[name] ))di tes zsh jika perintah "nama" diinstal pada sistem Anda, maka kedua alias dikelompokkan dengan {}. yang &&merupakan biner AND, jika b kemudian, maka jika Anda memiliki xclip maka alias akan ditetapkan.

echo "another test" | tee >(pbcopy)

Untuk mendapatkan konten clipboard Anda cukup ketik:

pbpaste | "any-command-you-need-here"
SergioAraujo
sumber
4
  xsel -b

Apakah pekerjaan untuk X Window, dan sebagian besar sudah diinstal. Tampilan di halaman manual xsel sepadan dengan usaha.

Martin Fischer
sumber
2

Beberapa program Windows yang saya tulis bertahun-tahun yang lalu. Mereka memungkinkan Anda membuang, mendorong, menambahkan dan mencetak clipboard. Ini berfungsi seperti ini:

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

Ini termasuk kode sumber: cmd_clip.zip

jeng
sumber
2

Ada beberapa cara. Beberapa cara yang telah disebutkan termasuk (saya pikir) tmux, layar, vim, emacs, dan shell. Saya tidak tahu emacs atau layar, jadi saya akan membahas tiga lainnya.

Tmux

Meskipun bukan pilihan X, tmux memiliki mode salin yang dapat diakses melalui prefix-[( prefixadalah Ctrl+ Bsecara default). Buffer yang digunakan untuk mode ini terpisah dan eksklusif untuk tmux, yang membuka beberapa kemungkinan dan membuatnya lebih fleksibel daripada pilihan X dalam situasi yang tepat.

Untuk keluar dari mode ini, tekan q; untuk menavigasi, menggunakan Anda vimatau emacsmengikat (default = vim), jadi hjkluntuk gerakan, v/V/C-vuntuk pemilihan karakter / garis / blok, dll. Ketika Anda memiliki pilihan Anda, tekan Enteruntuk menyalin dan keluar dari mode.

Untuk menempelkan dari buffer ini, gunakan prefix-].

Kulit

Setiap instalasi X11tampaknya datang dengan dua program secara default: xclipdan xsel(agak seperti itu juga datang dengan keduanya startxdan xinit). Sebagian besar jawaban lain menyebutkan xclip, dan saya sangat suka xseldengan singkatnya, jadi saya akan membahas xsel.

Dari xsel (1x) :

Opsi input

-a, - tambahkan

tambahkan input standar ke pilihan. Tersirat -i .

-f, --follow

tambahkan ke seleksi ketika input standar tumbuh. Tersirat -i .

-i, --input

baca input standar ke dalam pilihan.

Opsi keluaran

-o, --output

tulis pilihan ke output standar.

Opsi tindakan

-c, --clear

hapus pilihan. Mengganti semua opsi input.

-d, --delete

Meminta agar pilihan saat ini dihapus. Ini tidak hanya menghapus seleksi, tetapi juga meminta ke program di mana seleksi berada bahwa konten yang dipilih dihapus. Mengganti semua opsi input.

Pilihan pilihan

-p, --primary

beroperasi pada pilihan PRIMARY (default).

-s, --secondary

beroperasi pada pemilihan SECONDARY.

-b, --clipboard

beroperasi pada pemilihan CLIPBOARD.

Dan hanya itu yang perlu Anda ketahui. p(atau tidak sama sekali) untuk PRIMARY, suntuk SECONDARY, buntuk CLIPBOARD, ountuk keluaran.

Contoh: katakan saya ingin menyalin output dari fooTTY dan menempelkannya ke halaman web untuk laporan bug. Untuk melakukan ini, sebaiknya menyalin ke / dari sesi TTY / X. Jadi pertanyaannya menjadi bagaimana cara mengakses clipboard dari TTY?

Untuk contoh ini, kami akan menganggap sesi X dipajang :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

Maka saya bisa Ctrl-Vmemasukkannya ke dalam bentuk seperti biasa.

Sekarang katakan bahwa seseorang di situs dukungan memberi saya perintah untuk menjalankan untuk memperbaiki masalah. Ini rumit dan panjang.

$ 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

Pemesanan pizza tampaknya seperti penggunaan baris perintah yang produktif.

...bergerak.

Vim

Jika dikompilasi dengan +clipboard(Ini penting! Periksa Anda vim --version), Vim harus memiliki akses ke X PRIMARYdan CLIPBOARDpilihan. Kedua pilihan dapat diakses dari register *dan +, masing-masing, dan dapat ditulis dan dibaca dari pada waktu luang Anda sama dengan register lainnya. Sebagai contoh:

:%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

Jika salinan vim Anda tidak secara langsung mendukung akses ke pilihan X, itu bukan akhir dari dunia. Anda bisa menggunakan xselteknik seperti yang dijelaskan di bagian terakhir.

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

Bind combo kunci pasangan dan Anda harus baik.

Braden Best
sumber
Pasti selalu ingat untuk menggunakan DISPLAY=saat memanggil aplikasi X dari lingkungan non-X. Aplikasi X memerlukan DISPLAYvariabel lingkungan untuk mencari tahu server mana (atau apakah hanya ada satu server yang menangani beberapa sesi?) Yang mereka ajak bicara. Coba DISPLAY=:1 firefox(atau apa pun ID tampilan Anda; milik saya kebetulan :1) dari TTY, misalnya.
Braden Best
Bagi saya pilihan di lingkungan saya adalah :%y+di VIM.
HankCa
2

Dari thread ini, ada opsi yang tidak memerlukan menginstal gclip/ xclip/ xselsoftware pihak ketiga.

Skrip perl (karena perl biasanya selalu dipasang)

use Win32::Clipboard;
print Win32::Clipboard::GetText();
VONC
sumber
Bagaimana saya menggunakan ini? Simpan skrip ke PATH dan pipa ke dalamnya? Saya mencoba menulis bungkus cli dropbox untuk menyalin tautan berbagi, jadi saya hanya memerlukannya untuk menangani teks.
jena
2

pbcopy dibangun dalam OSX:

Menyalin konten .bash_profile:

cat ~/.bash_profile | pbcopy
Skulas
sumber
1

Di macOS, gunakan pbpaste.

Sebagai contoh:

Perbarui clipboard

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

Jika Anda seperti saya dan jalankan di server Linux tanpa hak akses root dan tidak ada xclip atau GPM, Anda bisa menyelesaikan masalah ini hanya dengan menggunakan file sementara. Sebagai contoh:

$ echo "Hello, World!" > ~/clip
$ echo `cat ~/clip`
Hello, World!
horta
sumber
Saya tidak melihat bagaimana kurangnya root privilege menjadi faktor dalam hal ini.
Braden Terbaik
3
@BradenBest Kurangnya hak akses root berarti saya tidak bisa menginstal sesuatu.
horta
Tetapi apa yang akan Anda instal? X? Di server? Kecuali jika Anda mengadakan layanan penerusan X yang aneh, saya tidak dapat melihat mengapa Anda ingin melakukannya.
Braden Terbaik
@ RadenBest Tidak yakin. Program atau layanan apa pun yang memungkinkan saya melakukan copy paste.
horta
1
Nah, jika Anda menggunakan salah satu dari X selections(yang harus tersirat oleh "clipboard" dan menyebutkan xclip / xsel), Anda memerlukan sesi X aktif (dan dengan demikian server X) sehingga Anda dapat mengakses seleksi di tempat pertama. Untuk melihat apa yang saya maksud, coba jalankan DISPLAY="" xseldi mesin lokal Anda. Ini akan keluar karena kesalahan, karena tidak dapat menemukan sesi "", dan tidak ada interaksi dengan pilihan X yang akan dilakukan. Itu sebabnya saya awalnya mengatakan bahwa saya tidak melihat bagaimana faktor privilege root menjadi ini: root atau tidak root, Anda tidak akan menemukan pilihan X yang berguna di lingkungan server.
Braden Best
1

Di Linux ini berfungsi:

cat filename | xclip
Tobias Kwant
sumber
1

pada Wayland xcopy sepertinya tidak berfungsi, gunakan wl-clipboard sebagai gantinya. misalnya pada fedora

sudo dnf install wl-clipboard

tree | wl-copy

wl-paste > file
Jens Timmerman
sumber
0

Meskipun> 1 tahun kemudian, saya berbagi solusi yang sedikit berbeda. Semoga ini bermanfaat bagi seseorang.

Kemarin saya menemukan diri saya dengan pertanyaan: "Bagaimana cara berbagi clipboard antara sesi pengguna yang berbeda?" . Saat beralih antar sesi dengan ctrlaltF7- ctrlaltF8, pada kenyataannya, Anda tidak dapat menempelkan apa yang Anda salin.

Saya datang dengan solusi cepat & kotor berikut , berdasarkan pipa bernama. Ini pasti sangat telanjang dan mentah, tetapi saya merasa fungsional:

user1@host:~$ mkfifo /tmp/sharedClip

kemudian di terminal pengirim

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

terakhir, di terminal penerima:

user2@host:~$ cat /tmp/sharedClip

Sekarang, Anda mengetik atau menempelkan apa pun di terminal pertama, dan (setelah memukul return), itu akan segera muncul di terminal penerima, dari mana Anda dapat menyalin / menempel lagi di mana pun Anda suka.

Tentu saja ini tidak hanya mengambil konten secara ketat dari clipboard user1 untuk membuatnya tersedia di clipboard user2, tetapi lebih dari itu membutuhkan sepasang tambahan klik Paste & Copy.

lurix66
sumber
Sepertinya tidak terlalu mengejutkan. Dua server X berbeda = dua set seleksi berbeda. Namun, Anda dapat mengatur skrip yang mengambil input / output melalui xsel/xclip. Sebagai contoh, salah satu ujung mendengarkan untuk melihat apakah ada pilihan yang berubah, dan kemudian secara otomatis pipa itu (melalui FIFO bernama) ke skrip lain, yang mendengarkan satu atau lebih pipa, yang memasukkannya ke dalam seleksi X sendiri. Menyalin teks dengan demikian secara otomatis akan menghasilkan teks yang sama muncul di pilihan sesi X lainnya. Dan jangan lupakan $DISPLAY.
Braden Best
0

Oneliner ruby ​​menginspirasi saya untuk mencoba dengan python.

Katakanlah kita menginginkan perintah yang memasukkan apa pun yang ada di clipboard dengan 4 spasi. Sempurna untuk berbagi cuplikan di stackoverflow.

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

itu bukan salah ketik. Python membutuhkan baris baru untuk melakukan perulangan. Kami ingin mengubah garis dalam satu pass untuk menghindari membangun array ekstra dalam memori.

Jika Anda tidak keberatan membangun array tambahan, cobalah:

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

tapi jujur ​​awk lebih baik untuk ini daripada python. Saya mendefinisikan alias ini di ~/.bashrcfile saya

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

sekarang ketika saya menjalankan indentapa pun yang ada di clipboard saya indentasi.

Harry Moreno
sumber