Как выполнить скрипт в оболочке при нажатии сочетания клавиш


14

Как я могу выполнить скрипт в оболочке при нажатии сочетания клавиш.

По сути, мне нужно, чтобы при нажатии сочетания клавиш скрипт считывал из файла и отображал это содержимое в терминале.


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

Ответы:


20

Вы можете использовать встроенную команду, bindчтобы отобразить сочетание клавиш, чтобы оно выполняло команду / сценарий оболочки.

пример

Скажем, мы хотим запустить команду pwd, когда нажимаем F12клавишу.

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

Теперь , когда я нажимаю F12на моей строке $:

$ pwd
/home/saml

Определение сочетаний клавиш

Вы можете использовать следующую технику, чтобы определить escape-код для данного сочетания клавиш. В большинстве систем нажмите 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

Так что связывайтесь со скриптом, который отображает содержимое.
Ларс Рорбах

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