Як виконати скрипт у оболонці при натисканні клавіші швидкого доступу


14

Як я міг виконати скрипт у Shell, коли натиснута клавіша швидкого доступу.

По суті, мені потрібно, коли натискається клавіша швидкого доступу, сценарій повинен читати з файлу і відображати цей вміст у терміналі.


Я спробував застосований вами метод, bind '"\e[24~":"airmon-ng start wlan0\n"'але після закриття терміналу, здається, річ скидається, і всі гарячі клавіші пішли

Відповіді:


20

Ви можете використовувати вбудовану команду, bindщоб зіставити ярлик клавіатури, щоб він виконав сценарій команди / оболонки.

Приклад

Скажіть, що ми хочемо виконати команду pwd, коли натискаємо F12клавішу.

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

Тепер , коли я натискаю F12на моїй рядку $:

$ pwd
/home/saml

Визначення комбінацій клавіш

Ви можете скористатися наступною методикою для визначення коду евакуації для заданого ярлика клавіатури. У більшості систем натисніть Ctrl+ V, відпустіть, а потім натисніть клавішу, для якої потрібно код. Є деякі інші системи, з якими він буде працювати MзамістьV

Приклад

Якщо натиснути Ctrl+, Vвідпустіть обидва Ctrlі, Vі, нарешті, натисніть F12у вікні терміналу, це поверне:

$ ^[[24~

Цей вихід можна інтерпретувати так, ^[є Escключовим. Отже, коли ми хочемо вказати саме цей ключ за допомогою bindкоманди, нам потрібно використовувати a, \eщоб позначити Escключ, а далі все інше зверху. Отже bindкоманда виглядає приблизно так:

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

Виконання команди посередині

Ви також можете скористатися bind -xдля налаштування ярликів клавіатури, які запускатимуть команди, коли ви знаходитесь в середині запиту чогось у відповідь, і результат цих команд буде показаний, але те, що ви коли-небудь вводили під час запиту, залишиться недоторканим.

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

ПРИМІТКА. Цей метод працює лише з комбінаціями клавіш, які виводять 1 символ, тому F12тут не працюватиме.

Приклад

Давайте псевдонім комбінації клавіш Alt+ Shift+ W.

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

Скажіть, я набираю команду finger:

$ finger

Тепер я натискаю комбінацію клавіш 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

Що відбувається, bindце запустити визначену команду who, взявши її вихід і вставивши її перед підказкою. Якщо ви повторите це, ви побачите, що відбувається, ось висновок від мене, що потрапив у нього 2 рази:

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

Твоя проблема

Тому однією ідеєю було б скористатися bind -xвищевказаним методом та catвідобразити цей текстовий файл за вашим запитом:

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

Тепер, коли я запускаю команди, я можу побачити цей файл так:

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

Виведення файлу someinfo.txtвідображається вище моєї fingerкоманди вище.

Список літератури


Мені потрібно лише відображати вміст, а не виконувати його.
user3539

Тому прив'яжіть до сценарію, який відображає вміст.
Lars Rohrbach

1
Ctrl + m не працює для мене. Це діє так, ніби я щойно натиснув Enter. Я думаю, що альтернатива (я баш новачок) - набрати echo ' (пробіл після одноцитати), потім натиснути Ctrl + v, потім потрібну клавішу, а потім пробіл, одноцитата ... як описано тут . Приклад:echo ' ^[OD '
aliteralmind
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.