В bash, как привязать функциональную клавишу к команде?
пример: я хочу связать F12 клавишу echo "foobar"
такой, что каждый раз, когда я ударил F12 на экран будет выведено сообщение "foobar". В идеале это может быть любая произвольная команда оболочки, а не только встроенные. Как это делается?
4 ответов
вы можете определить последовательность символов, испускаемых клавишей, нажав Ctrl-v в командной строке, затем нажмите интересующую вас клавишу. В моей системе для F12, Я ^[[24~
. The ^[
представляет Esc. Разные виды стержней или терминальных эмуляторов могут испустить различные коды для такого же ключа.
в приглашении Bash вы можете ввести такую команду, чтобы включить макрос ключа, чтобы вы могли попробовать из.
bind '"\e[24~":"foobar"'
теперь, когда вы нажимаете F12, вы получите "foobar" в командной строке готов к дальнейшему редактированию. Если вы хотите, чтобы нажатие клавиши немедленно вводило команду, вы можете добавить новую строку:
bind '"\e[24~":"pwd\n"'
теперь, когда вы нажимаете F12, вы получите текущий каталог отображается без необходимости нажимать Enter. Что делать, если вы уже набрали что-то в строке, и вы используете это, которое автоматически выполняется? Это может получить грязный. Однако, вы можете очистить строку как часть макроса:
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). Синтаксис
например:
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"'