#bash #readline
#bash #строка чтения
Вопрос:
Когда я набираю какую-либо команду, мне иногда хочется прочитать справку по команде. Например, когда я печатаю
sort --overwrite some_texI # I is a cursor
Я хотел бы проверить, есть ли у sort
команды --overwrite
опция чтения выходных данных sort --help
или любая другая опция-сводка, которую я сделал. Я ожидаю, что bind -x
смогу это реализовать, но понятия не имею, как передать (часть) текущей информации командной строки (в данном случае слово «сортировать»). Конечно, bind -x 'KEY: "sort --help"'
работает хорошо, но я хочу, чтобы это работало для всех команд. Таким образом, псевдокоманда будет bind -x 'KEY: "CURRENT_COMMAND --help"'
.
Кто-нибудь, пожалуйста, может дать решение или подсказку?
Комментарии:
1. @kvantour Вероятно, я этого не хочу. Я уже использую программируемое завершение, и это удобно, но это не говорит мне, например, о значении опции. Как следует из названия моего поста, я хотел бы выполнять произвольные команды, которые используют информацию текущей командной строки. Не только
sort --help
, но такжеprint_help_summary_created_by_me sort
и т.д.2. Часть вашего вопроса гласит Я хотел бы проверить, имеет ли команда sort параметр —overwrite . Использование хорошего
bash-autocompletion
позволило бы вам быстро проверить, доступна ли эта опция. Это может не сказать вам, что именно делает опция.3. Я только что проверил автозаполнение в ZSH (другая оболочка, производная от bash), и там в автозаполнении даже упоминается, о какой опции идет речь.
4. Возвращаясь к теме ZSH, вы можете использовать ESC-q, чтобы поместить текущую команду в стек буферов, что даст вам новую командную строку для запуска
sort --help
. Когда это завершится,sort --overwrite some_tex
будет удален из стека и помещен обратно в командную строку.5.
zsh
на самом деле не является производным отbash
. Однако у них обоих есть общий предок в оболочке Bourne.
Ответ №1:
Вы можете использовать READLINE_LINE
переменную bash. man bash
говорит
bind
[-m ключевая карта] keyseq:строка чтения-команда(отрывок)
-x
keyseq: командная оболочка(отрывок) При выполнении shell-команды оболочка присваивает
READLINE_LINE
переменной содержимое буфера строки readline
Итак, вам нужно первое слово READLINE_LINE
. Таким образом, решение таково bind -x 'KEY": "array=($READLINE_LINE); ${array[0]} --help"'
.