Этот вопрос очень похож на этот , но я не могу понять решение. Я также знаю этот урок , но все еще не могу понять, что я делаю неправильно.
Я пытаюсь автоматически заполнить список каталогов, которые находятся в /something/
:
$ ls /something/
One Other Three
таким образом, что это произойдет:
$ hi [TAB]
One Other Three
$ hi O[TAB]
One Other
Только когда первое слово есть hi
и не только внутри /something/
.
Это то, что я делаю в .profile
:
_codeComplete()
{
local cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen `ls /something/` -- $cur) )
}
complete -F _codeComplete "hi "
bash
filenames
autocomplete
Donovan
источник
источник
complete
команды, если вы ее еще не знаете и ищетеautocomplete
илиtab-completion
... Это было первое место, где я нашел имя команды, и что мне нужно было исправить приeject
обновлении до Ubuntu 14.04 ($ complete -p ls
->complete -F _longopt ls
, так что исправление былоcomplete -F _longopt eject
Позвольте мне попытаться улучшить принятый ответ.
Исходный ответ не удастся с именами файлов, содержащими пробелы. После некоторого исследования я понимаю, что вы можете изменить входной разделитель на конец строки:
заставляя функцию обрабатывать пробелы правильно.
источник
Вот версия, которая не только обрабатывает пробелы, но и избегает их:
(Основано на ответах Догбейна и Эдуардо Алмейды душ Сантуша , но с побегом, как было предоставлено антаком для SO: /programming//a/11536437/1536933 )
источник
источник