Bir kısayol tuşuna basıldığında kabukta bir komut dosyası yürütme


14

Bir kısayol tuşuna basıldığında Shell'de bir komut dosyasını nasıl yürütebilirim.

Temelde ihtiyacım olan şey, bir kısayol tuşuna basıldığında komut dosyası bir dosyadan okumalı ve terminalde bu içeriği görüntülemelidir.


Kullandığınız yöntemi denedim bind '"\e[24~":"airmon-ng start wlan0\n"'ama terminali kapattıktan sonra, şey sıfırlanmış gibi görünüyor ve tüm kısayol tuşları kayboldu

Yanıtlar:


20

bindBir klavye kısayolunu komut / kabuk komut dosyasını yürütecek şekilde eşlemek için yerleşik komutunu kullanabilirsiniz .

Misal

Diyelim ki pwd, tuşuna bastığımızda, komutu çalıştırmak istiyoruz F12.

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

Şimdi F12istemime bastığımda $:

$ pwd
/home/saml

Klavye kısayollarını belirleme

Belirli bir klavye kısayolunun çıkış kodunu belirlemek için aşağıdaki tekniği kullanabilirsiniz. Çoğu sistemde Ctrl+ tuşuna basın V, bırakın ve ardından kodunu istediğiniz tuşa basın. MBunun yerine çalışacağı başka sistemler de varV

Misal

Presleme Ctrl+ Vsonra serbest bırakmak Ctrlve Vson olarak basın F12bir terminal penceresinde bu verir:

$ ^[[24~

Bu çıktı aşağıdaki gibi yorumlanabilir ^[, Escanahtardır. Bu bindkomutu kullanarak bu özel anahtarı belirtmek istediğimizde , yukarıdan diğer her şeyi izleyen anahtarı \ebelirtmek için a kullanmamız gerekir Esc. Yani bindkomut şuna benzer:

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

Ortada bir komut yürütme

Ayrıca bind -x, komut istemine bir şey yazmanın ortasındayken komutları çalıştıracak klavye kısayollarını ayarlamak için de kullanabilirsiniz ve bu komutların çıktıları görüntülenir, ancak komut isteminde yazdığınız şey bozulmadan kalır.

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

NOT: Bu yöntem yalnızca 1 karakter çıkaran klavye kısayollarıyla çalışır, bu nedenle F12burada çalışmaz.

Misal

Alt+ Shift+ Klavye kısayolunu takma adlayalım W.

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

Diyelim ki komutu yazıyorum finger:

$ finger

Şimdi Alt+ Shift+ klavye kısayoluna basıyorum 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

Olan şey bind, tanımlanan komutu çalıştırmak, whoçıktısını almak ve komut isteminin önüne yerleştirmektir. Tekrar ederseniz, neler olduğunu göreceksiniz, işte benden 2 kez vurduğum çıktı:

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

Senin sorunun

Bu yüzden bir fikir bind -xyukarıdaki yöntemi kullanmak ve catbu metin dosyasını isteminizde görüntülemek olacaktır:

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

Şimdi komutları çalıştırdığımda bu dosyayı şöyle görebilirsiniz:

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

Dosya çıktısı someinfo.txtyukarıdaki fingerkomutumun üstünde görüntüleniyor.

Referanslar


Sadece içeriği görüntülemek gerekiyor, yürütmek için değil.
user3539

İçeriği görüntüleyen bir komut dosyasına bağlanın.
Lars Rohrbach

1
Ctrl + m benim için çalışmıyor. Sanki enter tuşuna basmışım gibi davranıyor. Sanırım bir alternatif (ben bir bash acemi) yazmak echo ' (tek tırnaktan sonra boşluk), sonra Ctrl + v, sonra istediğiniz tuşa ve sonra boşluk, tek tırnak ... burada açıklandığı gibi . Örnek:echo ' ^[OD '
aliteralmind
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.