¿Cómo tienen las herramientas de línea de comandos su propia lista de autocompletar?

24

¿Cómo conoce Bash en Ubuntu la lista específica de acciones de una herramienta?

Por ejemplo, si escribo apt-get y tab dos veces, solo veo eliminar, actualizar, actualizar ... etc., pero no las acciones para otro comando o los archivos en el directorio actual.

Estoy desarrollando una herramienta de línea de comandos en Go y me gustaría proporcionar esta función para las distribuciones que lo admiten.

Amustom Rustom
fuente
1
Eliminé "ubuntu" de su título y etiquetas, ya que es mejor como una pregunta más general (la respuesta no es específica de ninguna distribución).
Ricitos
1
Gran pregunta, a menudo me he preguntado esto, pero nunca me tomé el tiempo para buscarlo.
akatakritos

Respuestas:

25

Lo hace utilizando las funciones de finalización de bash v4. El paquete apt-getproporciona el código de finalización bash-completiony se encuentra en /usr/share/bash-completion/completions/apt-get. Las aplicaciones que tienen finalización y no son parte del bash-completionpaquete base colocan sus scripts de finalización /etc/bash_completion.d.

Las terminaciones se cargan a través del abastecimiento /etc/bash_completion. Exactamente dónde se hace esto variará dependiendo de las versiones de Debian o Ubuntu. Eso a su vez generará todo en /usr/share/bash-completion/completionsy /etc/bash_completion.d.

jordanm
fuente
Gracias, eso lo explica. Entonces, ¿la implementación no solo varía de Debian a Ubuntu, sino también en cada versión de la misma distribución?
Amged Rustom
1
@Amgad Funciona de la misma manera en todas las distribuciones. Las únicas diferencias son dónde se encuentran los archivos y quizás algunas configuraciones predeterminadas.
Gilles 'SO- deja de ser malvado'