Выполнить функцию readline без привязки клавиш?

26

Я просто читал man-страницу readline и обнаружил кучу замечательных команд, о которых я не знал. Однако у некоторых нет привязок клавиш по умолчанию. Есть ли способ выполнить несвязанные команды из оболочки?

Я не спрашиваю, как связать команду в ~ / .inputrc, а вместо этого, как выполнить ее как «один раз» из оболочки или в скрипте bash.

Например, команда «dump-variable». Есть ли какая-нибудь команда, в которую я могу передать «dump-variable» в качестве аргумента для ее выполнения?

erikcw
источник
2
Я не думаю, что есть, с первого взгляда на руководство по чтению и источник.
Джим Пэрис

Ответы:

10

Я считаю, что вы ищете, это сама bindкоманда. Согласно man builtinимеющейся информации, bind <readline-command>вы можете запускать одноразовые файлы, однако я не мог заставить его работать так, как говорится в руководстве: «Это заставляло ключи работать не для меня; Ваш пробег может варьироваться. Я нашел следующие команды, которые могут быть вам полезны.

bind -p # Equivalent to dump-functions [machine readable]
bind -P # Equivalent to dump-functions [human readable]

bind -s # Equivalent to dump-macros    [machine readable]
bind -S # Equivalent to dump-macros    [human readable]

bind -v # Equivalent to dump-variables [machine readable]
bind -V # Equivalent to dump-variables [human readable]

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

sparticvs
источник
3
Повторный вызов функций readline: я не думаю, что руководство на самом деле утверждает, что вы можете это сделать; в случае, если вы ссылаетесь на синтаксическую форму bind readline-command: я подозреваю, что commandздесь есть строка определения (отображения), а не вызываемая напрямую функция readline . Автозаполнение - это тонкость, явно предварительно настроенная на некоторых платформах (например, Fedora 20), но не на многих других ; его присутствие НЕ подразумевает, что вы можете вызывать функции readline напрямую - это довольно «тупая» спецификация завершения команды: завершение работает с любым аргументом, переданным в bind.
mklement0
1
+1 за команды для отображения действующих функций / макросов / переменных; стоит добавить -Xдля команд оболочки (определяется через -x).
mklement0