¿De dónde vienen las funciones de finalización de bash?

¿De dónde vienen las funciones de finalización de bash?

Tengo una Raspberry Pi con Raspbian (Debian Wheezy). Entré seten una terminal y me sorprendió la larga lista. Esto parece ser casi en su totalidad funciones de git: ~ 3700 líneas de ellas.

__git_all_commands=
__git_diff_common_options=$'--stat --numstat --shortstat --summary\n\t\t\t--patch-with-stat --name-only 
...

Mi pregunta es, ¿cómo llegaron allí y por qué?

De vez en cuando solía gitrecibir paquetes.

He comprobado a todos los sospechosos habituales /etc/profile, /etc/bash.bashrc, .bashrc,.profile


Encontré un script /etc/bash_completion.d/git(nunca antes había oído hablar de bash_completion). Tengo que estudiar un poco más para determinar qué hace esto y exactamente dónde se llama.

todavía necesito descubrirPOR QUÉMe gustaría ejecutar esto en cada shell de inicio de sesión cuando solo lo uso gituna o dos veces al año. (La Raspberry Pi no está exactamente dotada de RAM). Esto no parece suceder en mi Mac.

Respuesta1

Estas funciones son parte del soporte de finalización del shell para git. Se mantienen como parte del software Git. Debian (en el que se basa Raspbian) distribuye la configuración de finalización de bash en el gitpaquete. Las funciones están ubicadas en /etc/bash_completion.d/git, en el mismo directorio que otros soportes de finalización de comandos para bash.

Todos los archivos /etc/bash_completion.dse cargan como parte de la configuración de la finalización programable de bash, en formato /etc/bash_completion. .bashrcLas cargas predeterminadas de Debian /etc/bash_completion, puede editarlas si no desea completar ningún comando específico.

Si nunca usas git, elimina el gitpaquete. Si tiene el gitpaquete instalado, es de suponer que a veces ejecuta el gitcomando y, por lo tanto, querrá completarlo correctamente. “Uso git rara vez y quiero ahorrar unos pocos kilobytes de RAM” es una distinción demasiado fina incluso para Debian.

Si desea omitir ese archivo de finalización pero utilizar otros, puededesviarel archivo a un nombre que haga que /etc/bash_completion. Desviar un archivo es una forma de indicarle al administrador de paquetes que aplique actualizaciones y eliminaciones a un archivo ubicado en un lugar diferente.

dpkg-divert --add --local --rename --divert /etc/bash_completion.d/git.dpkg-diverted /etc/bash_completion.d/git

Respuesta2

Hay scripts globales y por usuario que se incluyen al iniciar sesión ( ,,, /etc/profile) .$HOME/.profile$HOME/.bash_profile$HOME/.bash_login

En la mayoría de las distribuciones, el contenido de algún directorio (como /etc/env.d/*o algo similar) generalmente se incluye en el script global, donde los paquetes pueden colocar sus propios scripts de configuración del entorno que se obtienen en cada inicio de sesión.

información relacionada