2

Я пытаюсь включить автозаполнение моих команд домашнего варки. Homebrew автоматически создает папку bash_completion.d и sym-ссылки на все файлы завершения.

$ ls -a `brew --prefix`/etc/bash_completion.d/
.  ..  brew_bash_completion.sh  git-completion.bash

Как видите, у меня есть доработки для brew и git . Поэтому я пытаюсь запустить файлы:

[ -d `brew --prefix`/etc/bash_completion.d ] && source `brew --prefix`/etc/bash_completion.d/*

Это в моем ~/.bash_profile , и я ожидаю, что это будет источником всех файлов в bash_completion.d . Когда я опробую это позже в терминале, работает только завершение для brew .

Я что-то упускаю?

1 ответ1

2

Помощь source ускользает от этой тайны:

source: source filename [arguments]
    Read and execute commands from FILENAME and return.  The pathnames
    in $PATH are used to find the directory containing FILENAME.  If any
    ARGUMENTS are supplied, they become the positional parameters when
    FILENAME is executed.

Это означает, что когда вы передаете ему список имен файлов, сгенерированных с помощью глоба, получается только первое, а все имена после него считаются его аргументами. Чтобы найти все файлы в вашем каталоге завершения, вам нужно будет зациклить его, т.е.

for f in "$(brew --prefix)"/etc/bash_completion.d/*; do source "$f"; done

Однако, когда вы используете завершение bash для homebrew, есть гораздо лучший способ: просто

source "$(brew --prefix)"/etc/bash_completion

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .