Bagaimana saya bisa menyalurkan output dari suatu perintah ke clipboard saya dan menempelkannya kembali saat menggunakan terminal? Contohnya:
cat file | clipboard
apt install xclip
dancat file | xclip -sel clip
Bagaimana saya bisa menyalurkan output dari suatu perintah ke clipboard saya dan menempelkannya kembali saat menggunakan terminal? Contohnya:
cat file | clipboard
apt install xclip
dancat file | xclip -sel clip
Jawaban:
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 xclip
untuk 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 v
sebagai perintah pertama dan kemudian menggantikannya di tempat untuk cd
digunakan.
Hanya salin konten ke X
clipboard
cat file | xclip
Jika Anda ingin menempel di tempat lain selain X
aplikasi, coba yang ini:
cat file | xclip -selection clipboard
alias "cs=xclip -selection clipboard"
dan alias "vs=xclip -o -selection clipboard"
membuat penyalinan / menempel dari clipboard sistem lebih mudah
Pada OS X, gunakan pbcopy
; pbpaste
pergi ke arah yang berlawanan.
pbcopy < .ssh/id_rsa.pub
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
git merge-base master some-branch | pbcopy
Saya telah membuat alat untuk Linux / OSX / Cygwin yang mirip dengan beberapa yang lain tetapi sedikit unik. Saya menyebutnya cb
dan dapat ditemukan di intisari github ini .
Pada intinya saya mendemonstrasikan cara melakukan copy dan paste melalui commandline menggunakan Linux, macOS, dan Cygwin.
_copy(){
cat | xclip -selection clipboard
}
_paste(){
xclip -selection clipboard -o
}
_copy(){
cat | pbcopy
}
_paste(){
pbpaste
}
_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."
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
$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017
# 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
$ 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
(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
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 clipboard
seperti yang ditunjukkan dalam dua contoh ini.
$ cat file | clipboard
$ clipboard | less
pbcopy
dan pbpaste
di Linux sehingga bekerja untuk Linux dan OS X.
~/.scripts/clipboard
* Jadikannya dapat dieksekusi chmod +x ~/.scripts/clipboard
untuk bash: * tambahkan export PATH=$PATH:~/.scripts
ke akhir ~/.bashrc
untuk ikan: * tambahkan set PATH ~/.scripts $PATH
ke ~/.config/fish/fish.config
Jika ada file atau folder yang belum ada, buat saja.
clipboard(){ ... }
dan menempelkannya ke .bashrc
date | cb | tee -a updates.log
. Itu akan mengirim date
output perintah ke clipboard dan meneruskannya ke tee -a
perintah yang menambahkannya ke file dan meneruskannya ke stdout
. Tapi itu seperti " tee anti bocor ke clipboard" karena jika Anda melakukannya date | cb
Anda tidak mendapatkan hasil. Dan akhirnya itu juga cb > file.txt
gist.github.com/RichardBronosky/…
xclip -i -selection clipboard
untukxargs echo -n | xclip -i -selection clipboard
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
Saya menggunakan Parcellite dan xsel
untuk menyalin pesan komit terakhir dari git
ke clipboard manager saya (karena beberapa alasan xclip
tidak berfungsi):
$ git log -1 --pretty=%B | xsel -i -b
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.)
Saya membuat alat kecil yang menyediakan fungsi serupa, tanpa menggunakan xclip atau xsel. stdout
disalin 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.
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
Saya berasal dari latar belakang KDE yang dilucuti dan tidak memiliki akses ke xclip
, xsel
atau 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 -0
pipa stdin menjadi satu argumen. Argumen ini diteruskan ke bash executable yang mengirimkan permintaan untuk klipper
menggunakan "salin ke clipboard" qdbus
. Pipa to /dev/null
adalah untuk tidak mencetak karakter baris baru yang dikembalikan oleh qdbus
ke 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.
Saya biasanya menjalankan perintah ini ketika saya harus menyalin ssh-key
:
cat ~/.ssh/id_rsa.pub | pbcopy
ctrl+v
di tempat lain.
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
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).
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 gdm
dan 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