¿Bash de Mac OS X lee scripts para todos los usuarios (scripts de finalización de pestañas) desde la ruta /opt/local/etc/bash_completion.d?

Me topé con algunas instrucciones en el libro "Pro Git"

Sugiere:

  1. Descargue este archivo: https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

    Si usa el shell Bash, Git viene con un buen script de autocompletado que puede habilitar. Descárguelo directamente desde el código fuente de Git en https://github.com/git/git/blob/master/contrib/completion/git-completion.bash . Copie este archivo en su directorio de inicio y agréguelo a su .bashrcarchivo:

    fuente ~/git-completion.bash

    Fuente https://github.com/progit/progit/blame/master/en/02-git-basics/01-chapter2.markdown#L1115

    (colocar esta línea en .bashrc no funcionará en los sistemas Mac OS X que discutí aquí: ¿ Por qué Mac OS X no genera ~/.bashrc? )

  2. Coloque este archivo git-completion.bash( /opt/local/etc/bash_completion.dsi desea que bash complete (para el comando git) para que funcione en todas las cuentas de usuario. (Como si bash leyera todos los scripts en /opt/local/etc/bash_completion.d)

    Si desea configurar Git para que todos los usuarios completen automáticamente el shell de Bash, copie este script en el /opt/local/etc/bash_completion.ddirectorio de los sistemas Mac o en el /etc/bash_completion.d/directorio de los sistemas Linux. Este es un directorio de scripts que Bash cargará automáticamente para proporcionar terminaciones de shell.

    Fuente: https://github.com/progit/progit/blame/master/en/02-git-basics/01-chapter2.markdown#L1119


Descubrí que bash de Mac OS NO lee scripts dentro de /opt/local/etc/bash_completion.d. Puse el archivo allí (creé todas las carpetas, porque no existían):Indicador de terminal que muestra que git-completion.bash existe y está en la ruta adecuada

Y la finalización de git no funciona en ninguna cuenta.

¿Bash de Mac OS X lee scripts para todos los usuarios de /opt/local/etc/bash_completion.d?

¿Está mal el libro "Pro Git"? ¿Puedo informarlo en su página de Github?

¿O estoy equivocado?

Respuestas (3)

Bash solo lee los scripts de forma predeterminada en su directorio de inicio, o si faltan en /etc. Consulte la documentación de Bash . Si usa Terminal.app de OSX, entonces de forma predeterminada se lee ~/.bash_profile.

Esto es cierto para todos los bash en Linux u otros sistemas operativos.

Para leer desde otro directorio, por ejemplo, /opt/local/etc/bash_completion.ddebe editar sus archivos de inicio para obtener (es decir, incluir) los archivos desde allí

Las instrucciones para el script no mencionan /opt/local/...cuál es una ubicación no estándar en cualquier Unix. (por no estándar, se permite que lo usen paquetes de terceros, pero no se define qué debería estar allí) Dicen

  1. Copie este archivo en algún lugar (por ejemplo, ~/.git-completion.sh).
  2. Agregue la siguiente línea a su .bashrc/ .zshrc:

    source ~/.git-completion.sh
    
  3. Considere cambiar su PS1 para que también muestre la rama actual, consulte git-prompt.shlos detalles.

La cotización progit asume que conoce bash. Todo lo que dice es colocar los archivos de la primera cita en un lugar específico si desea que todos los usuarios de la máquina los usen y no donde ~solo el usuario que los instala pueda verlos. es decir, el punto es multiusuario versus usuario único.

Él también elige ese camino ya que nada más lo usa y no debe editar /etcarchivos en OS X ya que las actualizaciones del sistema operativo de Apple podrían sobrescribirlos, por lo que debe elegir otro lugar. (Hubiera elegido algo debajo, /usr/localya que allí es donde deben ir los scripts mantenidos manualmente).

~/.bashrces el lugar correcto para editar y agregar la fuente. Consulte su otra pregunta y el manual de bash para configurar. ~/.bash_profileLa forma sugerida de bash es fuente .bashrcen .bash_profile. Tenga en cuenta que en OS X usar Terminal.app no ​​es la única forma de ejecutar shells, por lo que puede haber sesiones que comiencen con .bashrc.

"Si usa Terminal.app de OSX, de forma predeterminada se lee ~/.bash_profile" En lugar de -> "Después de leer ese archivo [/etc/profile], busca ~/.bash_profile, ~/.bash_login y ~/. perfil, en ese orden, y lee y ejecuta comandos desde el primero que existe y es legible". Fuente: gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files
-> "Si desea configurar Git para que todos los usuarios completen automáticamente el shell de Bash, copie este script en /opt/local/etc/bash_completion.d". ¿Esta oración suena como si "todos los usuarios" estuvieran destinados a obtener algo? Tal vez tengo problemas para entender el inglés (de verdad), pero veo aquí la frase "configurar Git para que se complete automáticamente el shell Bash", lo que para mí significa que simplemente funcionará (sin que el usuario obtenga lo que he puesto en esta carpeta)
No, eso significa para todos los usos en lugar de solo para un usuario y no significa que solo funcione

Los archivos de finalización de bash del núcleo no se instalan como parte de OS X, por lo que no hay ningún lugar para agregar su finalización de git para que el núcleo lo recoja.

Me disculpo, pero no estoy seguro de cómo instalé la finalización de bash, pero creo que usé MacPorts, también puedes usar Homebrew.

Tengo la carpeta que contiene archivos de finalización para varias herramientas de línea de comandos . /usr/local/opt/bash-completion/etc/bash_completion.dLa función bash_completion ciertamente lee todos los archivos en este directorio.

Entonces, primero debe instalar bash-completion, luego el archivo de finalización de git y todo estará bien.

¿Podría vincular a los scripts de finalización de bash? Y confirme que este párrafo del libro "Pro Git" es incorrecto y debe notificarse (para que otras personas ya no pierdan el tiempo preguntando sobre esto)
Está mal porque OS X no viene con la finalización incorporada. En lugar de intentar instalar la finalización bash a mano, use MacPorts o HomeBrew.
Entiendo que hay problemas con Mac OS X, pero creo que no está bien no señalarlo en el libro.
No hay problemas con OSX aquí, cumple con todos los estándares relevantes.
Si está en /usr/local, entonces no fue instalado por macports
Sí, está en mi lista de Homebrew, así que creo que debo haberlo instalado con eso, solo que no estoy seguro, ya que parece recordar haberlo instalado a mano y haber tenido un pequeño contratiempo o dos.

Dado que ninguna de las respuestas anteriores recibió su cheque, ¿por qué no pasar a zshla que tiene una pila de finalización más uniforme?

Sí, el libro bash necesita ser corregido y sí, tienes que hacer más trabajo para que funcione universalmente, pero para la mayoría de las personas tener una cuenta funcionando parece lo suficientemente bueno para bash.