Завершение Bash для команд в Mac OS X

38

Как получить finkи macportsавтозаполнить имена программ при вводе команд, как в Ubuntu apt-get?

Например, когда я печатаю

sudo port install ca

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

OS X даже не выполняет команды автозаполнения после sudo!

Усама Гамаль
источник

Ответы:

69

Баш-завершение добавляет завершение для:

  • Названия команд после sudoиwhich
  • Названия пакетов Macports и Homebrew (необязательно)
  • Имена хостов known_hostsдля таких команд, какssh
  • Папки на CDPATH

И так далее. Вы можете напечатать список команд завершения с помощью complete -pи просмотреть источник функции с помощью declare -f.

Установка Homebrew или MacPorts и Bash

Во-первых, вы должны установить Homebrew или MacPorts в соответствии с инструкциями. Примечание. Не устанавливайте оба, так как они конфликтуют.

Затем установите более новую версию Bash. Встроенный Bash в OS X немного стар, и вы получите больше вариантов завершения с Bash> 4.1, которые вы можете получить через

brew install bash

или

sudo port install bash

в зависимости от того, используете ли вы Homebrew или MacPorts.

Установка bash-дополнения с помощью Homebrew

Для установки bash-completionвам необходимо:

brew install bash-completion

И добавьте следующее к себе ~/.bash_profile:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
  . $(brew --prefix)/etc/bash_completion
fi

В настоящее время Homebrew устанавливает более старую версию bash-complete (1.3), которая все еще работает с Bash 3.x, но все же рекомендуется использовать Bash 4.x.

Установка bash-дополнения с MacPorts

С MacPorts:

sudo port install bash-completion

Затем добавьте в свой ~/.bash_profile:

if [ -f /opt/local/etc/profile.d/bash_completion.sh ]; then
  . /opt/local/etc/profile.d/bash_completion.sh
fi

См. Trac.macports.org/wiki/howto/bash-completion для получения инструкций о том, как включить завершение для имен портов.

slhck
источник
bash-completionПакет MacPorts предоставляет поддержку для завершения имен пакетов в качестве дополнительных аргументов после port <verb>. Смотрите здесь , строки 48-58. Это поведение упоминается в википедии MacPorts , в которой говорится: « Это не только для файлов и каталогов, но и, например, для команд port. Таким образом, вы вводите port <Tab>и получаете список всех возможных команд », хотя в нем только явно упоминается завершение глаголов (что намного проще).
Даниэль Бек
Пакет имена будут автоматически появившиеся, вики просто не говоря уже о том , что. Смотрите связанный код скрипта.
Даниэль Бек
variants.confНе для завершения для себя MacPorts; examples.conf определяет варианты автоматической установки для всех портов, как описано на вики-странице, на которую вы ссылаетесь. Добавление этой строки приводит к включению поддержки завершения bash, когда это возможно для устанавливаемых портов.
Кевин Рейд
Спасибо за совет об автозаполнении в доморощенном. Уже одно это заслужило этот ответ.
Пол Уогланд
Отлично, это позволило makeавтозаполнение, именно то, что я хотел.
Мати Тернер