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

27028
Osama Gamal

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

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

sudo port install ca 

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

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

35

1 ответ на вопрос

68
slhck

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

  • Названия команд после 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 для получения инструкций о том, как включить завершение для имен портов.

Пакет `bash-завершении` MacPorts обеспечивает поддержку для завершения имен пакетов в качестве дополнительных аргументов после` порта `. См. [Здесь] (http://trac.macports.org/browser/trunk/dports/sysutils/bash-completion/files/port), строки 48-58. Об этом поведении говорится в [википортах MacPorts] (http://trac.macports.org/wiki/howto/bash-completion), где говорится: «* Это не только для файлов и каталогов, но и, например, для команды `port`. Таким образом, вы вводите` port`и получите список всех возможных команд. *", хотя в нем только явно упоминается завершение глаголов (что намного проще). Daniel Beck 13 лет назад 0
Имена пакетов * автоматически заполняются, в вики просто не упоминается об этом. Смотрите связанный код скрипта. Daniel Beck 13 лет назад 0
`Examples.conf` не предназначен для самого MacPorts; examples.conf определяет варианты для автоматической установки * всех * портов, как описано на вики-странице, на которую вы ссылаетесь. Добавление этой строки приводит к включению поддержки завершения bash, если это возможно, для устанавливаемых портов. Kevin Reid 13 лет назад 0
Спасибо за совет об автозаполнении в доморощенном. Уже одно это заслужило этот ответ. Paul Wagland 13 лет назад 0
Отлично, это позволило автозаполнению make сделать то, что я хотел. Мати Тернер 10 лет назад 0
если у вас есть и Brew, и MacPorts, обязательно добавьте macports перед Brew, так как он проверяет наличие $ BASH_COMPLETION_COMPAT_DIR и завершает работу, если он заполнен. Marlon 8 лет назад 0