2012-05-04 3 views
4

Есть ли способ управления завершением для первой команды, набираемой в командной строке bash4?Запрограммированное завершение Bash при вводе «первой команды»

Я могу контролировать доработки для «пустой строки» с полным -E, но как только набираются некоторые символы, bash (или, возможно, readline) дает мне все имена файлов из PATH, встроенные команды (if, then else. .) и функции при попытке завершения (TAB).

Мне удалось избежать записей PATH, сняв PATH в PROMPT_COMMAND и восстановив его, связывая функцию, чтобы ловушка DEBUG, но не удалась избавиться от команд bash bultin.

Любые идеи?

+0

Извините, не вопрос программирования, голосование для перехода на http://superuser.com/ R вы можете «пометить» его и попросить модератора переместить i. (Я не ответил на ваш вопрос). Удачи. – shellter

+1

Каким образом это не вопрос программирования? Это абсолютно связанное с программированием, может быть, я должен более четко описать свою проблему. Он тесно связан с http://stackoverflow.com/questions/4726695/bash-and-readline-tab-completion-in-a-user-input-loop. Я разрабатываю CLI для интеграции в bash4 и должен контролировать доработки bash4 для фильтрации нежелательных предложений. –

+0

На мой взгляд, речь идет об использовании редактора, который помещается прямо в superuser.com. Вы можете очень хорошо получить ответ здесь на S.O. во всяком случае, так удачи! – shellter

ответ

-2

Окончание bash хранится в файле /etc/bash_completion.d/ Если у вас есть root-доступ, вы можете редактировать/удалять файлы там.

Если вы хотите управлять вещами на уровне пользователя, вы можете создавать и редактировать ~/.inputrc. Посмотрите/etc/inputrc, и это даст вам представление о том, с чего начать.

~/.inputrc переопределяет что-либо в файле/etc/inputrc, поэтому вы можете изменить места, где bash_completion ищет файлы завершения. Вы можете создать локальный каталог завершения и иметь только те элементы, которые вы хотите заполнить. Я считаю, что вы также можете устранить встроенные модули bash.

Есть также пара очень хороших уроков по завершению онлайн-игры. Here Here

+0

Он специально спрашивает об управлении завершением слова * first * по команде линия. – chepner

+0

, и это именно то, о чем я говорю. Он хочет настроить контролируемую среду с ограниченным доступом к расширению вкладок. Я ответил на вопрос. Вот цитата »и нужно контролировать пополнение bash4 для фильтрации нежелательных предложений» – xizdaqrian

+0

Проблема в том, что, как представляется, нет механизма для управления расширением * первого * слова. Вы можете установить завершение для полностью пустой строки, используя «complete -E»; в противном случае завершение основывается на * завершенном * первом слове. – chepner

1

Это настоящий слабое место в конструкции программируемых объектов завершения BASh в. Даже выполнение команды «по умолчанию» -D вступает в силу для команд только на пустой строке (при условии, что не указан complete -E). Нечто вроде complete -I (для неполного ввода команд) отсутствует.

Смежные вопросы