В bash, как привязать функциональную клавишу к команде?



пример: я хочу связать F12 клавишу echo "foobar" такой, что каждый раз, когда я ударил F12 на экран будет выведено сообщение "foobar". В идеале это может быть любая произвольная команда оболочки, а не только встроенные. Как это можно сделать?

682   4  

4 ответов:

вы можете определить последовательность символов, испускаемых клавишей, нажав Ctrl -v в командной строке, затем нажмите клавишу, которая вас интересует. В моей системе для F12, Я ^[[24~. Элемент ^[ представляет Esc. Различные типы клемм или эмуляторов клемм могут выдавать различные коды для одного и того же ключа.

в командной строке Bash вы можете ввести такую команду, чтобы включить ключевой макрос, чтобы вы могли попробовать его из.

bind '"\e[24~":"foobar"'

теперь, когда вы нажимаете F12, вы получите "foobar" в командной строке готов к дальнейшему редактированию. Если вы хотите, чтобы нажатие клавиши сразу вводило команду, вы можете добавить новую строку:

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

теперь, когда вы нажимаете F12, вы получите текущий каталог отображается без необходимости нажимать введите. Что делать, если вы уже набрали что-то в строке, и вы используете это, которое автоматически выполняется? Он мог бы получить грязный. Тем не менее, вы можете очистить строку как часть вашего макроса:

bind '"\e[24~":"\C-k \C-upwd\n"'

пространство гарантирует, что Ctrl - u что-то удалить, чтобы сохранить колокол звонит.

после того, как вы получили макрос работает так, как вы хотите, вы можете сделать его постоянным, добавив его в свой . Там нет необходимости в bind команда или внешний набор одиночных цитаты:

"\e[24~":"\C-k \C-upwd\n"

Edit:

вы также можете создать привязку ключа, которая будет выполнять что-то, не нарушая текущую командную строку.

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

затем, когда вы вводите команду, которая требует имя пользователя, например, и вам нужно знать имена пользователей, которые вошли в систему, вы можете нажать Alt -Shift - W и вывода who будет отображаться и приглашение будет переиздается с вашей частичной командой неповрежденной и курсором в той же позиции в строке.

к сожалению, это не работает должным образом для таких ключей, как F12 который выводит более двух символов. В некоторых случаях это можно обойти.

команда (who в данном случае) может быть любой исполняемый файл - программа, скрипт или функция.

вы можете определить привязки клавиш bash .inputrc (конфигурационный файл для библиотеки GNU Readline). Синтаксис

: macro

например:

Control-o: "> output"

создать макрос, который вставляет "> выход" при нажатии

 "\e[11~": "echo foobar"

создаст макрос, который вставляет "echo foobar" при нажатии клавиши F1... Я не знаю, что такое keysym для F11.

Это решение специфично для сред X11 и не имеет ничего общего с bash, но добавляет следующее к вашему .Xmodmaps

 % loadkeys
 keycode 88 = F12
 string F12 = "foobar"
 %

отправит строку "foobar" на терминал при нажатии F12.

Я хотел привязать Ctrl+B команды. Вдохновленный ответом выше, я попытался использовать bind но никак не мог понять, какая серия загадочных закорючек (\e[24~ ?) перевести на Ctrl+B.

на Mac, перейдите в Настройки Приложения терминала, профили -> клавиатура -> + затем нажмите комбинацию клавиш, которую вы ищете, и она выйдет. Для меня Ctrl+B в результате 2 что я успешно привязан к команде

bind '"2":"echo command"'

также, если вы хотите команда, которая будет выполнена сразу (а не просто вставлена в приглашение), вы можете добавить Enter в конец своей команды, например:

bind '"2":"echo command5"'

Comments

    Ничего не найдено.