Bagaimana saya bisa menyalin output dari perintah langsung ke clipboard saya?

529

Bagaimana saya bisa menyalurkan output dari suatu perintah ke clipboard saya dan menempelkannya kembali saat menggunakan terminal? Contohnya:

cat file | clipboard
Legenda
sumber
kemungkinan duplikat Pipa ke / dari Clipboard
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
kemungkinan duplikat dari superuser.com/questions/104981/...
Champ
Saya baru saja mengajukan pertanyaan terkait karena saya tidak bisa membuat xclip berfungsi saat masuk ke Ubuntu dari Git Bash di Windows: stackoverflow.com/q/60117294/470749
Ryan
1
Simpan konten file ke papan klip. apt install xclipdancat file | xclip -sel clip
EsmaeelE

Jawaban:

598

Saya selalu ingin melakukan ini dan menemukan cara yang bagus dan mudah untuk melakukannya. Saya menuliskan prosedur lengkap kalau-kalau ada orang lain yang membutuhkannya.

Pertama instal program 16 kB bernama xclip:

sudo apt-get install xclip

Anda kemudian dapat menyalurkan output ke xclipuntuk disalin ke clipboard:

cat file | xclip

Untuk menempelkan teks yang baru saja Anda salin, Anda harus menggunakan:

xclip -o

Untuk menyederhanakan kehidupan, Anda dapat mengatur alias di file .bashrc Anda seperti yang saya lakukan:

alias "c=xclip"
alias "v=xclip -o"

Untuk melihat betapa berharganya ini, bayangkan saya ingin membuka jalur saya saat ini di jendela terminal baru (mungkin ada cara lain untuk melakukannya seperti Ctrl+ Tpada beberapa sistem, tetapi ini hanya untuk tujuan ilustrasi):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

Perhatikan ` ` sekitarnya v. Ini dieksekusi vsebagai perintah pertama dan kemudian menggantikannya di tempat untuk cddigunakan.

Hanya salin konten ke Xclipboard

cat file | xclip

Jika Anda ingin menempel di tempat lain selain Xaplikasi, coba yang ini:

cat file | xclip -selection clipboard
Legenda
sumber
146
"cat file | xclip" hanya menyalin konten ke clipboard 'X', jika Anda ingin menempelkan di tempat lain selain aplikasi 'X', coba yang ini: "file cat | xclip-clipboard pilihan"
khotyn
5
Pilihan pegangan Anda sesuai!
Matt Joiner
4
Jika Anda ingin menghapus karakter baris baru sehingga Anda dapat langsung menyisipkan dan mengedit hasil "pwd | c", Anda dapat melakukan "pwd | tr -d '\ n' | xclip -Pemilihan c"
Anake
12
juga mendefinisikan alias "cs=xclip -selection clipboard"dan alias "vs=xclip -o -selection clipboard"membuat penyalinan / menempel dari clipboard sistem lebih mudah
Yibo Yang
1
Bagaimana dengan solusi di mana saya tidak memiliki akses sudo, dan xclip tidak diinstal ??
DanGordon
179

Pada OS X, gunakan pbcopy; pbpastepergi ke arah yang berlawanan.

pbcopy < .ssh/id_rsa.pub
DavidPhillipOster
sumber
14
Yups! Sama seperti ini untuk mantan:pbcopy < .ssh/id_rsa.pub
doublejosh
tidak bekerja untuk output perintah tho - misalnyapbcopy < git merge-base master some-branch
Ben
jika Anda menggunakan tmux, itu tidak akan berfungsi kecuali jika Anda memasang kembali sesi Anda: superuser.com/a/413233/146254
Atav32
1
Anda juga dapat menggunakan cat, jika Anda sudah menggunakannya: cat file.txt | pbcopy
rtrigoso
3
Saya tahu komentarnya berusia 5 tahun, tetapi jika seseorang menemukan ini di masa depan, untuk digunakan dengan output perintah, lakukangit merge-base master some-branch | pbcopy
Sam
62

Saya telah membuat alat untuk Linux / OSX / Cygwin yang mirip dengan beberapa yang lain tetapi sedikit unik. Saya menyebutnya cbdan dapat ditemukan di intisari github ini .

Pada intinya saya mendemonstrasikan cara melakukan copy dan paste melalui commandline menggunakan Linux, macOS, dan Cygwin.

Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

macOS

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

Catatan: Saya awalnya hanya bermaksud menyebutkan ini dalam komentar saya untuk jawaban Bob Enohp . Tetapi kemudian saya menyadari bahwa saya harus menambahkan README ke inti saya. Karena editor inti tidak menawarkan preview Penurunan harga, saya menggunakan kotak jawaban di sini dan setelah menyalin / menempelkannya ke pemikiran utama saya, "Saya mungkin juga mengirimkan jawaban."

cb

Tee anti bocor ke clipboard

Script ini dimodelkan setelah tee(lihat man tee).

Ini seperti perintah salin dan tempel normal Anda, tetapi bersatu dan dapat merasakan kapan Anda menginginkannya dapat ditularkan

Contohnya

Salinan

$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017

Tempel

# clipboard retained from the previous block
$ cb
Tue Jan 24 23:00:00 EST 2017
$ cb | cat
Tue Jan 24 23:00:00 EST 2017
$ cb > foo
$ cat foo
Tue Jan 24 23:00:00 EST 2017

Rantai

$ date | cb | tee updates.log
Tue Jan 24 23:11:11 EST 2017
$ cat updates.log
Tue Jan 24 23:11:11 EST 2017
# clipboard contains: Tue Jan 24 23:11:11 EST 2017

Salin melalui pengalihan file

(Secara kronologis masuk akal untuk melakukan demo di bagian akhir)

# clipboard retained from the previous block
$ cb < foo
$ cb
Tue Jan 24 23:00:00 EST 2017
# note the minutes and seconds changed from 11 back to 00
Bruno Bronosky
sumber
Ini berfungsi sempurna bagi saya untuk menyalin output perintah ke clipboard di terminal pada macOS, terima kasih!
Joshua Dyck
46

Saya menulis skrip kecil ini yang mengeluarkan tebakan tebakan dari perintah salin / tempel.

Versi Linux dari skrip bergantung pada xclip yang sudah diinstal di sistem Anda. Script ini disebut clipboard.

#!/bin/bash
# Linux version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if command -v xclip 1>/dev/null; then
    if [[ -p /dev/stdin ]] ; then
        # stdin is a pipe
        # stdin -> clipboard
        xclip -i -selection clipboard
    else
        # stdin is not a pipe
        # clipboard -> stdout
        xclip -o -selection clipboard
    fi
else
    echo "Remember to install xclip"
fi

Versi OS X dari skrip bergantung pada pbcopy dan pbpaste yang sudah diinstal pada semua Mac.

#!/bin/bash
# OS X version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if [[ -p /dev/stdin ]] ; then
    # stdin is a pipe
    # stdin -> clipboard
    pbcopy
else
    # stdin is not a pipe
    # clipboard -> stdout
    pbpaste
fi

Menggunakan skrip sangat sederhana karena Anda cukup pipa masuk atau keluar clipboardseperti yang ditunjukkan dalam dua contoh ini.

$ cat file | clipboard

$ clipboard | less
Bob Enohp
sumber
3
Saya menggunakan nama-nama pbcopydan pbpastedi Linux sehingga bekerja untuk Linux dan OS X.
StackedCrooked
Untuk membuat skrip berfungsi secara global di ubuntu: * Simpan di ~/.scripts/clipboard * Jadikannya dapat dieksekusi chmod +x ~/.scripts/clipboard untuk bash: * tambahkan export PATH=$PATH:~/.scriptske akhir ~/.bashrc untuk ikan: * tambahkan set PATH ~/.scripts $PATHke ~/.config/fish/fish.config Jika ada file atau folder yang belum ada, buat saja.
Hoki
2
Anda juga dapat membungkus skrip ini sebagai fungsi clipboard(){ ... }dan menempelkannya ke .bashrc
Sebastian Nowak
Ini sangat mirip dengan yang saya buat, tapi saya mengizinkan chaining seperti date | cb | tee -a updates.log. Itu akan mengirim dateoutput perintah ke clipboard dan meneruskannya ke tee -aperintah yang menambahkannya ke file dan meneruskannya ke stdout. Tapi itu seperti " tee anti bocor ke clipboard" karena jika Anda melakukannya date | cbAnda tidak mendapatkan hasil. Dan akhirnya itu juga cb > file.txt gist.github.com/RichardBronosky/…
Bruno Bronosky
Satu saran - hapus karakter trailing newline untuk menghindari mengeksekusi perintah pada paste (misalnya jika menyalin-paste jalur). Saya melakukannya dengan memodifikasi perintah xclip -i -selection clipboarduntukxargs echo -n | xclip -i -selection clipboard
Ivaylo Strandjev
23

Tambahkan ini ke ~/.bashrc:

# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'

Sekarang klip pasta p dan salinan klip c - tetapi Anda juga dapat melakukan hal-hal yang lebih menarik:

clipp | sed 's/^/    /' | cclip

↑ indentasi clipboard Anda; bagus untuk situs tanpa { }tombol stack overflow

Anda dapat menambahkannya dengan menjalankan ini:

printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc
pengguna3276552
sumber
Tolong beri contoh penggunaan
Ulf Aslak
7

Saya menggunakan Parcellite dan xseluntuk menyalin pesan komit terakhir dari gitke clipboard manager saya (karena beberapa alasan xcliptidak berfungsi):

$ git log -1 --pretty=%B | xsel -i -b
Michal Przybylowicz
sumber
7

Tanpa menggunakan alat eksternal, jika Anda terhubung ke tampilan server SSH, ini adalah perintah yang relatif mudah:

Dari prompt perintah Windows 7+:

ssh user@server cat /etc/passwd | clip

Ini akan menempatkan konten file jarak jauh ke clipboard lokal Anda.

(Perintah tersebut mengharuskan menjalankan Pageant untuk kunci, atau ia akan meminta Anda untuk kata sandi.)

d.raev
sumber
1
@AfshinMoazami, judul dan pertanyaannya sendiri bersifat generik, Hanya tag yang mengisyaratkan sistem unix, dan jawaban saya mencakup kasus ketika Anda mencoba mendapatkan tanggal DARI server unix KE mesin Windows, yang mungkin bermanfaat bagi pembaca di masa mendatang.
d.raev
1
Terpilih karena ya, berguna untuk admin Windows yang hanya memiliki Powershell untuk dimainkan secara lokal (walaupun sekarang dengan LSW sebenarnya berfungsi, saya dapat langsung melakukan bash dari Powershell dan melakukan * hal-hal aneh dari sana).
flith
Ini bekerja pada DOS prompt serta git bash pada windows 10 yaituecho Hello World | clip
5

Untuk mac, ini adalah contoh cara untuk menyalin (ke clipboard) tempel (dari clipboard) menggunakan baris perintah

Salin hasil pwdperintah ke clipboard sebagai

$ pwd | pbcopy

Gunakan konten di clipboard sebagai

$ cd $(pbpaste)
mcvkr
sumber
3

Saya membuat alat kecil yang menyediakan fungsi serupa, tanpa menggunakan xclip atau xsel. stdoutdisalin ke clipboard dan dapat ditempelkan kembali di terminal. Lihat:

https://sourceforge.net/projects/commandlinecopypaste/

Perhatikan, bahwa alat ini tidak perlu sesi-X. Clipboard hanya dapat digunakan di dalam terminal dan tidak harus ditempelkan oleh Ctrl+Vatau klik tengah mouse ke jendela-X lainnya.

Dirk Duschinger
sumber
3

Di Linux dengan xclip diinstal:

xclip -pilihan clipboard <file

tristobal
sumber
2

Berdasarkan posting sebelumnya, saya berakhir dengan solusi alias ringan-berat berikut yang dapat ditambahkan ke .bashrc:

if [ -n "$(type -P xclip)" ]
then
  alias xclip='xclip -selection clipboard'
  alias clipboard='if [ -p /dev/stdin ]; then xclip -in; fi; xclip -out'
fi

Contoh:

# Copy
$ date | clipboard
Sat Dec 29 14:12:57 PST 2018

# Paste
$ date
Sat Dec 29 14:12:57 PST 2018

# Chain
$ date | clipboard | wc
   1       6      29
Kornieff
sumber
1

Saya berasal dari latar belakang KDE yang dilucuti dan tidak memiliki akses ke xclip, xselatau hal-hal mewah lainnya. Saya memiliki Konsole TCSH untuk memperburuk keadaan.

Persyaratan: qdbus klipper xargs bash

Buat bash yang dapat dieksekusi foo.sh.

#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null

Catatan: Ini perlu bash karena TCSH tidak mendukung argumen multi-baris.

Diikuti oleh alias TCSH di .cshrc.

alias clipboard xargs -0 /path/to/foo

Penjelasan:

xargs -0pipa stdin menjadi satu argumen. Argumen ini diteruskan ke bash executable yang mengirimkan permintaan untuk klippermenggunakan "salin ke clipboard" qdbus. Pipa to /dev/nulladalah untuk tidak mencetak karakter baris baru yang dikembalikan oleh qdbuske konsol.

Contoh penggunaan:

ls | clipboard

Ini menyalin isi folder saat ini ke clipboard.

Catatan: Hanya berfungsi sebagai pipa. Gunakan bash yang dapat dieksekusi secara langsung jika Anda perlu menyalin argumen.

Ryan Dsouza
sumber
1

Saya biasanya menjalankan perintah ini ketika saya harus menyalin ssh-key:

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v di tempat lain.

Yamen Ashraf
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

Bagi mereka yang menggunakan bash yang terinstal di sistem windows mereka (dikenal sebagai Windows Subsystem untuk Linux (WSL)), mencoba xclip akan memberikan kesalahan:

Error: Can't open display: (null)

Sebaliknya, ingatlah bahwa subsistem linux memiliki akses ke windows executable. Mungkin untuk menggunakan clip.exe seperti

echo hello | clip.exe

yang memungkinkan Anda untuk menggunakan perintah tempel (ctrl-v).

Deng
sumber
1
Catat bahwa jika xserver (seperti vcxsvr atau xming) diinstal pada windows, tampilan sudah aktif dan xclipboard sedang berjalan, Anda sebenarnya dapat menggunakan xclip tanpa terlihat.
bitbyte
0

Hanya untuk menutupi kasus tepi :) dan karena judul pertanyaan bertanya (setidaknya sekarang) bagaimana cara menyalin output dari perintah langsung ke clipboard.

Sering kali saya merasa berguna untuk menyalin output dari perintah setelah dieksekusi dan saya tidak ingin atau tidak dapat menjalankan perintah lagi.

Untuk skenario ini, kita bisa menggunakan gdm atau utilitas mouse serupa dan memilih menggunakan mouse. apt-get install gdmdan kemudian klik kanan atau kombinasi Cntrl + Shift + c dan Cntrl + Shift + v untuk menyalin dan menempel di terminal

Atau, yang merupakan metode yang disukai untuk saya (karena mouse tidak dapat memilih dengan benar di dalam satu panel ketika Anda memiliki beberapa panel berdampingan dan Anda perlu memilih lebih dari satu baris), menggunakan tmux kita dapat menyalin ke dalam buffer tmux menggunakan standar [, spasi, pindah untuk memilih, memasukkan atau Anda dapat memilih satu blok kode. Juga ini sangat berguna ketika Anda berada di dalam salah satu jalur cli multiplexer seperti tmux DAN Anda perlu memilih banyak teks, tetapi bukan nomor baris (setup vim saya membuat nomor baris)

Setelah ini, Anda dapat menggunakan perintah:

tmux save-buffer - | xclip -i

Tentu saja Anda dapat menambahkannya ke sesuatu yang Anda sukai atau mengikat langsung di file konfigurasi tmux

Ini hanya untuk memberi Anda jawaban konseptual untuk menutupi kasus tepi ini ketika itu tidak mungkin untuk menjalankan perintah lagi. Jika Anda membutuhkan contoh kode yang lebih spesifik, beri tahu saya

Bersulang

George Mogilevsky
sumber