Cómo implementar la finalización automática de bash dinámico

7

Hice un guión que enumera los proyectos disponibles. Puede iniciar un proyecto ingresando script start <project>.

Ahora sería genial habilitar el autocompletado, por lo que si ingresa start Organy presiona TAB, se completa automáticamente start Organisation.

La parte difícil es que la lista de proyectos es dinámica. La lista de proyectos disponibles cambia con frecuencia y todos los usuarios tienen diferentes proyectos disponibles.

Mi idea era guardar los proyectos disponibles en un archivo json y usar este archivo para habilitar el autocompletado. Sé que tengo que crear un archivo /etc/bash_completion.d/, pero no sé cómo puedo implementar un autocompletado "dinámico" que depende de los proyectos disponibles.

Andreas
fuente

Respuestas:

10

Supongamos que tiene un script llamado output_projectsque enumera todos los proyectos disponibles. Ahora llámalo desde una función bash:

_list_projects() {
  ./output_projects
}

Ahora, agrégalo a Me startgusta en nuestro ejemplo con algo como esto:

complete -F __list_projects start

Básicamente, cada vez que presione <tab>bash ejecutará la función y obtendrá una nueva lista de proyectos disponibles.

Probado en:

$ bash --version | head -1
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

¿Eso resolvió tu problema? De lo contrario, reformule y aclare lo que estaba buscando.

NS G
fuente