В bash, как привязать функциональную клавишу к команде?
пример: я хочу связать F12 клавишу echo "foobar" такой, что каждый раз, когда я ударил F12 на экран будет выведено сообщение "foobar". В идеале это может быть любая произвольная команда оболочки, а не только встроенные. Как это можно сделать?
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