Использование 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 ?

  • Как я могу настроить привязку пользовательских ключей даже в SSH-ed на другой компьютер?
  • Неожиданное поведение команды привязки Readline
  • привязать к строке с экранированными двойными кавычками
  • Как убить вперед до конца большого слова или следующего символа пробела
  • Как связать «\ C-;» в ~ / .inputrc?
  • Можно ли назначить несколько команд одной горячей клавише? (bash, xterm)
  • Как создать кросс-платформенные команды привязки клавиатуры?
  • xinput - Ctrl + <Left> неправильно, если сопоставление истории-поиска-назад
  • 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' 
    Linux и Unix - лучшая ОС в мире.