Использование bind для чтения текущей командной строки

Я использую bind -x для выполнения скрипта всякий раз, когда нажимается определенная последовательность клавиш.

Например, у меня есть сценарий в /usr/local/bin/foo с содержимым

 #!/bin/bash echo foo 

Если я запустил bind -x '" ": /usr/local/bin/foo' то каждый раз, когда я нажимаю пробел дважды, он эхо «foo». Все идет нормально.

То, что я хочу иметь, – это доступ (и, в идеале, изменение) текущей команды, которая вводится. Если я набираю some really long command (в конце есть два пробела), мой скрипт запускается, но как он может видеть, что я уже ввел some really long command и изменил ее на some other long command ?

One Solution collect form web for “Использование bind для чтения текущей командной строки”

Основываясь на этом ответе , я думаю, вам придется сделать ваш скрипт в исходную функцию bash, изменить его READLINE_LINE (и READLINE_POINT в соответствии с новой длиной / желаемой точкой курсора), а затем bind -x '" " : that-function-name' .

Просто для уточнения; если вы хотите изменить некоторые команды с двойным пространством, сделайте что-то вроде:

 autocomplete() { if [ "$READLINE_LINE" = "some really long command" ] then READLINE_LINE="some other long command" READLINE_POINT=23 fi } bind -x '" " : autocomplete' 
  • читать с историей
  • Как преобразовать параметры inputrc в bashrc?
  • Ctrl-a не приводит меня к началу подсказки, пока я работаю на экране GNU
  • Есть ли способ включить Ctrl + L для очистки экрана при установке «set -o vi»?
  • Каковы ограничения длины оболочки bash для здесь-docs?
  • Выделение текста в bash при использовании обратного поиска истории с помощью Ctrl-R
  • Перемещение по пробельному разделительному слову в bash / readline
  • Отключить автозаполнение вкладок в интерактивном режиме
  • Есть ли клиенты IRC с командной строкой, использующие readline?
  • Как повторить в настоящее время введенный параметр на консоли bash?
  • Как я могу использовать vi для редактирования строки подсказки утилиты?
  • Linux и Unix - лучшая ОС в мире.