Jawaban saya menawarkan perintah sederhana dalam tiga sintaks yang berbeda, yang semuanya bekerja sama, tetapi yang satu sedikit lebih pendek dan lebih mudah untuk mengetik daripada yang kedua. Variasi ketiga adalah apa yang disebut alias, itu berarti Anda dapat menetapkan perintah nama kustom dan memanggilnya dengan mengeksekusi itu tanpa harus mengingat hal-hal kompleks.
Persiapan:
Pertama, instal paket xsel
yang memungkinkan Anda untuk mengakses papan klip X dari terminal:
sudo apt-get install xsel
Variasi perintah 1 (pendek):
Setelah itu, Anda bisa mengetikkan baris berikut untuk menyalin perintah sebelumnya ke clipboard:
xsel -ib <<<!!:q
Jika Anda ingin menyalin perintah terbaru kedua, ganti !!
dengan !-2
, untuk penggunaan terakhir ketiga !-3
dan seterusnya.
Untuk menjelaskan apa yang Anda jalankan, berikut ini beberapa rincian perintah:
xsel
adalah alat baris perintah untuk mengakses papan klip X.
Untuk info lebih lanjut, baca manualnya secara online atau dengan menjalankan man xsel
.
- The
-i
parameter mengatakan xsel
untuk membaca dari stdin (biasanya masukan berarti keyboard ini, tapi kita akan redirect sesuatu di sini)
- The
-b
menspesifikasikan parameter untuk menggunakan clipboard bukan "utama" atau "sekunder" Pilihan X.
<<<
adalah sintaks Bash khusus yang disebut "Here String".
Ini pada dasarnya memperluas (tidak mengevaluasi!) Argumen (hanya satu!) Setelah itu dan mengarahkan kembali sebagai string ke stdin (input standar) dari perintah sebelum / sesudahnya berdiri.
!!:q
disebut "perintah bang" untuk ekspansi sejarah di bash. Itu menggantikan dirinya dengan baris perintah yang sebelumnya diketik.
Untuk info lebih lanjut, baca manual lokalnya dengan menjalankan man history
(manual online tidak membantu).
- The
!!
singkatan baris perintah sebelumnya dan adalah sinonim untuk !-1
.
Jelas !-2
berarti kemudian baris perintah terakhir kedua. Jangan lupa tanda minus -
, jika tidak maka akan mengembalikan perintah ke-2 (ke-3 / ...) yang pernah Anda ketik.
- The
:q
memodifikasi perintah bang dan memberitahu bash untuk melampirkan substitusi dalam tanda kutip tunggal ( '
) untuk mencegah ekspansi lebih lanjut oleh shell.
Variasi perintah 2 (sedikit lebih lama):
echo !!:q | xsel -ib
echo
memiliki pekerjaan sederhana untuk mencetak semua argumennya ke terminal stdout.
!!:q
disebut "perintah bang" untuk ekspansi sejarah di bash. Itu menggantikan dirinya dengan baris perintah yang sebelumnya diketik.
- The
!!
singkatan baris perintah sebelumnya dan adalah sinonim untuk !-1
. Jelas !-2
berarti kemudian baris perintah terakhir kedua. Jangan lupa tanda minus -
, jika tidak maka akan mengembalikan perintah ke-2 (ke-3 / ...) yang pernah Anda ketik.
- The
:q
memodifikasi perintah bang dan memberitahu bash untuk melampirkan substitusi dalam tanda kutip tunggal ( '
) untuk mencegah ekspansi lebih lanjut oleh shell.
|
adalah sebuah pipa. Ini mengarahkan output terminal ("stdout") dari perintah sebelum ke input terminal ("stdin") dari perintah setelahnya.
xsel
adalah alat baris perintah untuk mengakses papan klip X.
Untuk info lebih lanjut, baca manualnya secara online atau dengan menjalankan man xsel
.
- The
-i
parameter mengatakan xsel
untuk membaca dari stdin (biasanya masukan berarti keyboard ini, tapi kita akan redirect sesuatu di sini)
- The
-b
menspesifikasikan parameter untuk menggunakan clipboard bukan "utama" atau "sekunder" Pilihan X.
Variasi perintah 3 (alias):
Alias bash adalah hal yang keren jika Anda tidak ingin mengingat perintah panjang atau rumit yang sering Anda gunakan. Anda dapat menetapkan perintah ini ke nama alias sederhana, yang bisa Anda jalankan alih-alih perintah panjang untuk mencapai yang sama.
Sayangnya, karena perintah bang adalah fitur Bash khusus dan dapat diperluas sebelum alias diselesaikan, Anda tidak bisa hanya menyebutkan salah satu variasi di atas karena !!
bagian itu tidak akan berfungsi. Tapi ada solusinya.
Untuk mengatur alias, jalankan baris berikut di terminal Anda. Perhatikan bahwa Anda dapat memilih nama variabel Bash yang valid alih-alih copylastcommand
:
alias copylastcommand='history -p \!\! | xsel -ib'
Namun ini hanya persisten untuk sesi Bash Anda saat ini, yang berarti alias akan hilang setelah Anda menutup jendela terminal. Anda dapat membuatnya terus-menerus di setiap sesi Bash Anda dengan menambahkan baris ini di atas ke ~/.bashrc
file Anda , atau ke ~/.bash_aliases
file Anda jika Anda punya.
Sekali lagi, jeda singkat dari garis:
alias name='command'
adalah sintaks untuk menetapkan alias di Bash. Ini command
akan dijalankan setiap kali Anda mengeksekusi name
mulai sekarang.
history -p \!\!
menampilkan baris perintah yang sebelumnya dieksekusi ke stdout (output standar). Tanpa -p
saklar, itu tidak hanya akan mencetak tetapi juga menjalankan perintah lagi.
Perhatikan bahwa kita perlu melarikan diri dari poni ( !
) dengan garis miring terbalik ( \
), karena jika tidak bash akan memperluas mereka ketika kita mencoba untuk mengatur alias, yang tidak masuk akal karena mereka perlu di alias seperti apa adanya.
Sekali lagi, Anda juga dapat menentukan perintah terakhir [n] dengan mengganti bang kedua dengan -n
, misalnya \!-2
.
|
adalah sebuah pipa. Ini mengarahkan kembali output standar ("stdout") dari perintah sebelum ke standar terminal ("stdin") dari perintah setelahnya.
xsel
adalah alat baris perintah untuk mengakses papan klip X.
Untuk info lebih lanjut, baca manualnya secara online atau dengan menjalankan man xsel
.
- The
-i
parameter mengatakan xsel
untuk membaca dari stdin (biasanya masukan berarti keyboard ini, tapi kita akan redirect sesuatu di sini)
- The
-b
menspesifikasikan parameter untuk menggunakan clipboard bukan "utama" atau "sekunder" Pilihan X.
<<<"!!" xsel -ib
<<<
struktur itu dipanggil lagi? Dan saya pikir<<<!!:q xsel -ib
lebih baik (membiarkan perintah sejarah bang melakukan kutipan), atau apakah Anda tidak setuju?!!:q
gunakan tanda kutip tunggal ('
) ...<<<"!!" xsel -ib
. Ya,<<<!!:q xsel -ib
lebih baik, lakukanlah.xsel
memiliki sintaks yang menarikAnda bisa menggunakan
xclip
:Jadi dalam kasus Anda:
c
singkatan clipboard.Anda mungkin perlu menginstal
xclip
dulu:EDIT:
Jika Anda hanya ingin perintah yang Anda ketikkan (bukan output) disalin ke clipboard, Anda dapat menggunakan string Di sini:
Atau pipa:
sumber
echo "command" | xclip -selection clipboard
... Atau membuat script di bawah~/.bin
:echo "$@" | xclip -selection clipboard
. Katakanlah Anda menyimpannya sebagai "cpy", maka Anda bisacpy youtube-dl stuff
dan itu akan disalin ke clipboard tanpa dieksekusi.echo "$@" | xclip -selection c && $@
, atau sesuatu yang lebih pintar dengan eval ...Saya baru saja membuat skrip kecil
zsh
yang digunakanxclip
untuk melakukan ini:Script ini menyalin perintah terakhir yang dimasukkan dalam shell / terminal ke clipboard sistem. Itu tidak akan bekerja pada server jarak jauh yang khas.
Saya pikir hanya perlu beberapa menit untuk menulis skrip ini, tetapi ternyata butuh waktu lama untuk membuatnya berfungsi ketika saya tersandung cara
zsh
menangani sejarah.Yang
tail -n 2
pertamased
dalam hal ini berhadapan dengan fakta bahwa perintah untuk skrip ini sendiri sedang direkam dalam sejarah dan karena itu mendapat dua baris sejarah dan menghapus yang terakhir.Script ini berfungsi, dan itu semacam teka-teki yang menyenangkan, tetapi saya benar-benar ingin tahu apakah ada cara yang lebih sederhana atau lebih elegan dalam melakukan ini
zsh
.sumber
tail
dansed
perintah menjadi satu atau dua perintah. Perintah-perintah itu menggunakan!!
yang dijelaskan di sini - harus tersedia dalam ZSH ....!!
memang sepertinya akan sangat membantu di sini, terima kasih!Saya menggunakan sebagai manajer clipboard, jadi.
Perintah terakhir ke clipboard
Papan klip untuk vim scratch
ZSH spesifik
Saya pikir ide-ide ini dapat membantu Anda membuat solusi sendiri
sumber