Почему «$ <space><tab><tab>» выполняет завершение имени файла? - PullRequest
0 голосов
/ 24 июня 2018

При попытке настроить программируемое завершение я столкнулся с поведением, которое я не понимаю.

Учитывая эти три сценария завершения, я понимаю их следующим образом:


$<TAB><TAB>

Начало строки -> используйте complete -E -> если это не такt существует, используйте complete -D -> если его не существует, используйте завершение Bash по умолчанию -> в строке нет слов -> используйте завершение команды.


$com<TAB><TAB>

Попытка завершить первое слово -> использовать завершение команды.


$command argu<TAB><TAB>

В строке есть хотя бы одно слово -> попытка дополнить аргумент -> использовать complete дляуказанная команда -> если она не существует, используйте complete -D -> если она не существует, используйте завершение Bash по умолчанию -> уже есть хотя бы одно слово вв строке, поэтому не используйте завершение команды -> не начинается с $, ~ или @, поэтому выполните завершение имени файла.


Мой вопрос: почему выполняется завершение имени файла?вместо завершения команды в этом сценарии, хотя в строке еще нет слов:

$<SPACE><TAB><TAB>

Еще большесбивает с толку, поскольку приведенное ниже завершение команды выполняется должным образом:

$<SPACE>com<TAB><TAB>

Скорее всего, я неправильно понял руководство, и я был бы весьма признателен за любое объяснение.


ПРИМЕЧАНИЕ: $ обозначает подсказку, а не буквальный знак доллара.

1 Ответ

0 голосов
/ 24 июня 2018

Когда строка начинается с пробела в оболочке Bash, это говорит оболочке, что команда не должна входить в историю команд.Это можно настроить, установив переменную HISTCONTROL env в .bashrc, .profile или любом другом файле, который вы хотите, и должен использоваться по умолчанию (см. Также Как предотвратить отображение команд в истории bash? ).

Таким образом, выполнение команды одинаково, когда строка имеет начальный пробел, за исключением того, что эта команда не входит в историю.Таким образом, завершение кода также ведет себя так же.

...