Achèvement Bash pour les commandes sous Mac OS X

38

Comment puis-je obtenir finket macportscompléter automatiquement les noms de programmes lors de la saisie de commandes, comme dans Ubuntu apt-get?

Par exemple quand je tape

sudo port install ca

et appuyez sur tab, je veux que le terminal réalise la complétion automatique ou me montre les commandes disponibles.

OS X ne complète même pas automatiquement les commandes après sudo!

Osama Gamal
la source

Réponses:

69

bash-completion ajoute la complétion pour:

  • Noms de commande après sudoetwhich
  • Noms des packages Macports et Homebrew (facultatif)
  • Noms d'hôtes dans known_hostsdes commandes telles quessh
  • Dossiers sur CDPATH

Etc. Vous pouvez imprimer une liste de commandes d'achèvement avec complete -pet voir la source d'une fonction avec declare -f.

Installer Homebrew ou MacPorts et Bash

Tout d'abord, vous devez installer Homebrew ou MacPorts conformément aux instructions. Remarque: N'installez pas les deux, car ils sont en conflit.

Ensuite, installez une version plus récente de Bash. Le Bash intégré à OS X est un peu ancien, et vous aurez plus d'options de complétion avec Bash> 4.1, que vous pourrez utiliser

brew install bash

ou

sudo port install bash

selon que vous utilisiez Homebrew ou MacPorts.

Installation de bash-completion avec Homebrew

Pour installer bash-completion, vous devez:

brew install bash-completion

Et ajoutez ce qui suit à votre ~/.bash_profile:

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

Homebrew installe actuellement une version plus ancienne de bash-completion (1.3) qui fonctionne toujours avec Bash 3.x, mais il est néanmoins recommandé d’utiliser Bash 4.x.

Installation de bash-completion avec MacPorts

Avec MacPorts:

sudo port install bash-completion

Ensuite, ajoutez à votre ~/.bash_profile:

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

Voir trac.macports.org/wiki/howto/bash-completion pour des instructions sur l'activation de l'achèvement pour les noms de port.

slhck
la source
Le bash-completionpackage MacPorts permet de compléter les noms de package sous la forme d'arguments supplémentaires après port <verb>. Voir ici les lignes 48 à 58. Ce comportement est évoqué dans le wiki MacPorts , qui indique: " Il ne s'agit pas uniquement des fichiers et des répertoires, mais également, par exemple, des commandes de port. Vous saisissez port <Tab>et obtenez une liste de toutes les commandes possibles ", bien qu'il ne mentionne explicitement que l'achèvement des verbes (ce qui est beaucoup plus simple).
Daniel Beck
Les noms de paquets sont autocomplétés, le wiki ne le mentionne pas. Voir le code de script lié.
Daniel Beck
Le variants.confn'est pas à compléter pour MacPorts lui-même; variants.conf définit les variantes à définir automatiquement pour tous les ports, comme expliqué sur la page du wiki que vous avez liée. L'ajout de cette ligne active la prise en charge de l'achèvement de bash lorsque cela est possible pour les ports que vous installez.
Kevin Reid
Merci pour l'astuce sur l'auto-complétion dans l'homebrew. Cela seul a valu à cette réponse un vote positif.
Paul Wagland
Excellent, cela permettait l' makeauto-complétion, juste ce que je voulais.
Victime vendredi