Bagaimana cara menempelkan perintah ke TTY?

20

Saya memiliki beberapa perintah dan path file yang agak panjang yang telah saya salin ke clipboard dan perlu dijalankan dalam TTY, namun path file terlalu panjang untuk mengetik ulang dan saya ingin hanya menempelkannya setelah $(saya dapat mengetik ulang perintah sebelumnya mereka kemudian), apakah ada cara untuk melakukan ini?

Jadi saya ingin menjalankan perintah dan memilikinya di baris berikutnya dimulai dengan $meletakkan teks yang disalin ke clipboard seperti:

$ specialCommandToPasteText
$ pastedText

Saya menjalankan Ubuntu GNOME 16.04 dengan GNOME 3.20.


sumber
3
Rekatkan perintah ke skrip Bash dalam editor teks, lalu jalankan skrip dari TTY?
Nick Weinberg
@NickWeinberg: Bukan pilihan, ini semua ada di CLI dan program yang saya jalankan di sana hanya memiliki kemampuan menyalin.
2
Dari program apa Anda menyalinnya?
Nick Weinberg
Apakah Anda menggunakan gpmuntuk memberikan dukungan mouse di VT, seperti yang disarankan dalam jawaban Anda sendiri untuk pertanyaan sebelumnya ?
steeldriver
1
Salah satu solusi yang mungkin adalah dengan menggunakan fungsi salin / tempel di tmux atau layar
Nick Weinberg

Jawaban:

28

Ini sederhana, tetapi Anda memerlukan alat tambahan.

  1. Instal paket xselyang memberikan perintah mudah untuk mengakses clipboard:

    sudo apt-get install xsel
    
  2. Cari tahu yang $DISPLAYdesktop Anda gunakan. Biasanya seharusnya begitu :0, tetapi Anda dapat memeriksanya dengan menjalankan perintah ini di emulator terminal di desktop GUI Anda:

    echo $DISPLAY
    

    Saya akan berasumsi outputnya :0, ganti dengan output aktual Anda di perintah berikut jika berbeda.

  3. Salin perintah yang ingin Anda jalankan di TTY, misalnya menggunakan Ctrl+ C.

  4. Beralih ke TTY yang ingin Anda gunakan, misalnya ke TTY1 menggunakan Ctrl+ Alt+ F1.
    Masuk dengan mengetik nama pengguna dan kata sandi Anda.

  5. Masukkan perintah lengkap yang ingin Anda jalankan, tetapi ganti bagian yang ingin Anda masukkan dari clipboard dengan $(DISPLAY=:0 xsel -ob).

    Misalnya jika Anda menyalin daftar besar paket yang akan diinstal, Anda bisa mengetikkan ini ke TTY:

    sudo apt-get update && sudo apt-get install $(DISPLAY=:0 xsel -ob)
    

    Cuplikan clipboard tidak harus berada di akhir perintah Anda, tetapi mungkin muncul di mana saja.


Untuk menyederhanakan lebih lanjut, mari kita pindahkan ini masih sedikit rumit DISPLAY=:0 xsel -obke skrip. Saya akan memberi nama PASTE(karena pastesudah diambil), tetapi Anda juga dapat menyebutnya secara berbeda.

Untuk membuat file skrip di lokasi di mana setiap pengguna dapat menjalankannya tanpa harus menentukan path lengkap (saya sarankan /usr/local/binuntuk ini) dan untuk membuatnya dapat dieksekusi, cukup jalankan dua perintah:

( echo '#!/bin/bash' && echo 'DISPLAY=:0 xsel -ob' ) | sudo tee /usr/local/bin/PASTE
sudo chmod +x /usr/local/bin/PASTE

Sekarang Anda cukup menanamkan $(PASTE)ke perintah Anda pada TTY untuk memasukkan konten clipboard dari desktop Anda di sana.

Komandan Byte
sumber
2
Terima kasih! Ini akan membantu saya dengan lebih banyak hal sekarang daripada apa yang saya tanyakan sebelumnya! :)
1
Anda bahkan dapat menyimpan DISPLAY=:0 xsel -obsebagai Bash alias atau skrip kecil di mana saja (sebut saja PASTE) dan hanya menggunakan formulir singkat seperti $(PASTE)menggunakan konten clipboard dalam perintah Anda.
Byte Commander
Pendekatan yang sangat bagus
Sergiy Kolodyazhnyy
21

Secara pribadi, saya hanya menggunakan file teks:

  1. Di lingkungan desktop Anda, buka terminal dan

    echo "whatever long text you have copied" > file
    
  2. Jatuhkan ke tty dan

    $(cat file)
    
terdon
sumber
2
Ini bagus untuk diketahui. Saya sebenarnya tidak berpikir bahwa perintah sederhana seperti ini akan bekerja dengan baik. Terkadang pikiran hanya berpikir terlalu rumit. Terima kasih! =)
Terrance
1
Saya hanya menggunakan some-command 'shift + insert (untuk menempel). 'kembali. Menempelkan di dalam tanda kutip tunggal atau ganda mencegah baris baru dalam teks yang disisipkan dari menjalankan perintah sebelum saya dapat mengeditnya untuk memperbaiki masalah. IDK apa yang Anda peroleh untuk menempatkan teks dalam file. Bash memiliki penekanan tombol pengeditan garis yang sangat kuat, seperti panah ctrl-kiri atau ctrl-kanan untuk bergerak dengan kata-kata. alt-backspace untuk menghapus kata-kata mundur. Alt-d untuk menghapus kata-kata maju, dll.
Peter Cordes
Oh, saya baru tahu bahwa OP berarti konsol teks VT ketika dia mengatakan TTY. Seseorang harus benar-benar mengedit pertanyaan, karena setiap terminal tempat Anda menjalankan shell adalah tty, termasuk pseudo-terminal yang dikendalikan oleh program seperti xterm.
Peter Cordes
@PeterCordes ya tapi istilah "tty" sering, jika tidak akurat, digunakan untuk merujuk ke konsol virtual.
terdon
4

Solusi lain yang mungkin tidak tercantum di atas melibatkan penggunaan vim, tempel, dan jalankan :!unix_commanddalam mode perintah:

  1. salin perintah dan path ke clipboard
  2. buka vim, masuk ke mode perintah Esc, masuk ke prompt:
  3. ketik bang ! dan kemudian tempel Ctrl+ Shift+ Vperintah yang sebelumnya Anda salin di prompt dan jalankan
Marcellinov
sumber