Completar bash para comandos en Mac OS X

38

¿Cómo obtengo finky macportsautocompleto nombres de programa al escribir comandos, como en Ubuntu apt-get?

Por ejemplo cuando escribo

sudo port install ca

y presione tab, quiero que el terminal se complete automáticamente o me muestre los comandos disponibles.

¡OS X ni siquiera completa automáticamente los comandos después sudo!

Osama Gamal
fuente

Respuestas:

69

bash-complete agrega terminación para:

  • Comando nombres después sudoywhich
  • Nombres de paquetes Macports y Homebrew (opcional)
  • Nombres de host known_hostspara comandos comossh
  • Carpetas en CDPATH

Y así. Puede imprimir una lista de comandos de finalización con complete -py ver la fuente de una función con declare -f.

Instalación de Homebrew o MacPorts y Bash

Primero, debe instalar Homebrew o MacPorts de acuerdo con las instrucciones. Nota: No instale ambos, ya que entran en conflicto.

Luego, instale una versión más nueva de Bash. El Bash incorporado en OS X es un poco antiguo, y obtendrá más opciones de finalización con Bash> 4.1, que puede obtener

brew install bash

o

sudo port install bash

dependiendo de si usa Homebrew o MacPorts.

Instalación de bash-complete con Homebrew

Para instalar bash-completion, debes:

brew install bash-completion

Y agregue lo siguiente a su ~/.bash_profile:

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

Homebrew actualmente instala una versión anterior de bash-complete (1.3) que todavía funciona con Bash 3.x, pero aún así, se recomienda usar Bash 4.x.

Instalación de bash-complete con MacPorts

Con MacPorts:

sudo port install bash-completion

Luego, agregue a su ~/.bash_profile:

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

Consulte trac.macports.org/wiki/howto/bash-completion para obtener instrucciones sobre cómo habilitar la finalización de los nombres de puerto.

slhck
fuente
El bash-completionpaquete de MacPorts brinda soporte para completar los nombres de paquetes como argumentos adicionales después port <verb>. Ver aquí , líneas 48-58. Este comportamiento se insinúa en la wiki de MacPorts , que dice: " Esto no es solo para archivos y directorios, sino también, por ejemplo, para los comandos de port. Así que escribe port <Tab>y obtiene una lista de todos los comandos posibles ", aunque solo menciona explícitamente terminación de los verbos (que es mucho más simple).
Daniel Beck
Los nombres de los paquetes se completan automáticamente, el wiki simplemente no menciona eso. Ver el código del script vinculado.
Daniel Beck
El variants.confno es para completar para MacPorts en sí; variantes.conf define variantes para establecer automáticamente para todos los puertos, como se explica en la página wiki que ha vinculado. Agregar esa línea hace que el soporte de finalización de bash esté habilitado cuando sea posible para los puertos que instale.
Kevin Reid
Gracias por el consejo sobre autocompletado en homebrew. Eso solo le valió a esta respuesta un voto positivo.
Paul Wagland
Excelente, este makeautocompletado habilitado , justo lo que quería.
Мати Тернер