Estoy tratando de escribir una pequeña aplicación de iniciador de comandos, y me gustaría usar las terminaciones de pestañas de bash en mi propio sistema de finalización. He podido obtener una lista de terminaciones para comandos generales usando compgen -abck
.
Sin embargo, también me gustaría obtener terminaciones para comandos específicos: por ejemplo, la entrada git p
debe mostrar compleción para los comandos de git.Accediendo a terminaciones de bash para comandos específicos programáticamente
¿Hay alguna manera de que pueda usar compgen
para hacer esto? Si no, ¿hay otras formas en que pueda obtener una lista de terminaciones programáticamente?
[EDITAR: Para aclarar, no estoy tratando de proporcionar finalización de bash - mi aplicación es un iniciador de comandos GUI. Simplemente me gustaría usar las terminaciones existentes de bash en mi propia aplicación.]
Parece que el código hace exactamente lo que quiero hacer con mi aplicación. Tendré que portarlo a Bash regular, pero sigue siendo muy útil. ¡Muchas gracias! –
Hice algunas pruebas y esto es lo que se ejecuta para completar "git l":/usr/bin/env bash -c 'fuente/etc/bash_completion; __print_completions() {for ((i = 0; i <$ {# COMPREPLY [*]}; i ++)); hacer eco $ {COMPREPLY [i]}; hecho }; COMP_WORDS = (git l); COMP_LINE = "git l"; COMP_COUNT = 6; COMP_CWORD = 1; _git; __print_completions ' –
"_git" se encuentra a través de "complete -p" que imprime "complete -o bashdefault -o default -o nospace -F _git git". Entonces, si la primera palabra es "git", llame a "_git". COMP_COUNT es la longitud de la cadena hasta ahora más uno. COMP_CWORD es la palabra para completar (la primera es el índice 0). –