Cara menjalankan skrip di shell saat tombol pintas ditekan

14

Bagaimana saya bisa menjalankan skrip di Shell ketika tombol pintas ditekan.

Pada dasarnya yang saya butuhkan adalah ketika tombol pintas ditekan, skrip harus membaca dari file dan menampilkan konten di terminal.

user3539
sumber
Saya mencoba metode yang Anda gunakan bind '"\e[24~":"airmon-ng start wlan0\n"'tetapi setelah saya menutup terminal, masalahnya tampaknya akan diatur ulang dan semua hotkey hilang

Jawaban:

20

Anda dapat menggunakan perintah builtin, binduntuk memetakan pintasan keyboard sehingga mengeksekusi skrip perintah / shell.

Contoh

Katakanlah kita ingin menjalankan perintah pwd,, ketika kita menekan F12tombol.

$ bind '"\e[24~":"pwd\n"'

Sekarang ketika saya tekan F12pada prompt saya, $:

$ pwd
/home/saml

Menentukan pintasan keyboard

Anda dapat menggunakan teknik berikut untuk menentukan kode jalan keluar untuk pintasan keyboard yang diberikan. Pada sebagian besar sistem, tekan Ctrl+ V, lepaskan, lalu tekan tombol yang Anda inginkan kodenya. Ada beberapa sistem lain akan bekerja dengan MbukannyaV

Contoh

Menekan Ctrl+ Vkemudian lepaskan kedua Ctrldan Vdan akhirnya pers F12di jendela terminal mengembalikan ini:

$ ^[[24~

Output ini dapat diartikan sebagai berikut, ^[adalah Esckuncinya. Jadi ketika kita ingin menentukan kunci khusus ini menggunakan bindperintah, kita perlu menggunakan a \euntuk menunjukkan Esckunci diikuti oleh semua yang lain dari atas. Jadi bindperintahnya terlihat seperti ini:

$ bind '"\e[24~":"....."'

Menjalankan perintah di tengah

Anda juga dapat menggunakan bind -xuntuk mengatur pintasan keyboard yang akan menjalankan perintah saat Anda sedang mengetik sesuatu di prompt, dan output perintah ini akan ditampilkan, tetapi apa pun yang Anda ketikkan pada prompt akan tetap utuh.

$ bind -x '"\eW":"..."'

CATATAN: Metode ini hanya berfungsi dengan pintasan keyboard yang menghasilkan 1 karakter, jadi F12tidak akan berfungsi di sini.

Contoh

Mari alias pintasan keyboard Alt+ Shift+ W.

$ bind -x '"\eW":"who"'

Katakanlah saya sedang mengetik perintah finger:

$ finger

Sekarang saya menekan pintasan keyboard Alt+ Shift+ W:

saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
$ finger

Apa yang terjadi bindadalah menjalankan perintah yang ditentukan who, mengambil outputnya dan memasukkannya di depan prompt. Jika Anda mengulanginya, Anda akan melihat apa yang terjadi, inilah output dari saya yang memukulnya 2 kali:

saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
saml     tty1         2013-09-01 11:01 (:0)
saml     pts/0        2013-09-01 11:03 (:0.0)
saml     pts/1        2013-09-01 11:05 (:0.0)
saml     pts/2        2013-09-01 11:05 (:0.0)
saml     pts/5        2013-09-03 22:45 (:0.0)
$ finger

Masalahmu

Jadi satu ide adalah menggunakan bind -xmetode di atas dan catmenampilkan file teks ini sesuai permintaan Anda:

$ bind -x '"\eW":"cat someinfo.txt"'

Sekarang ketika saya menjalankan perintah saya bisa melihat file ini seperti ini:

This is text from some 
multi-line file reminding
me how to do some 
stuff
$ finger 

Output file someinfo.txtditampilkan di atas fingerperintah saya di atas.

Referensi

slm
sumber
Saya hanya perlu menampilkan isinya, bukan untuk mengeksekusinya.
user3539
Jadi ikat ke skrip yang menampilkan konten.
Lars Rohrbach
1
Ctrl + m tidak berfungsi untuk saya. Kerjanya seolah-olah saya baru saja menekan enter. Alternatif yang menurut saya (saya pemula bash) adalah mengetikkan echo ' (spasi setelah tanda kutip tunggal), lalu tekan Ctrl + v, lalu kunci yang Anda inginkan, dan kemudian spasi, tanda kutip tunggal ... seperti dijelaskan di sini . Contoh:echo ' ^[OD '
aliteralmind