guia - ¿Cómo funciona la finalización de la pestaña bash?
qgis manual (2)
Estuve pasando mucho tiempo en el shell últimamente y me pregunto cómo funciona la función de autocompletar. ¿Cuál es el mecanismo detrás de esto? ¿Cómo sabe el bash el contenido de cada directorio?
Hay dos partes en el autocompletado:
La biblioteca readline, como ya se mencionó por fixje, administra la edición de la línea de comando y devuelve la llamada a bash cuando se presiona la pestaña, para permitir la finalización. Bash luego da (vea el siguiente punto) una lista de posibles terminaciones, y readline inserta tantos caracteres como sean identificados inequívocamente por los caracteres ya ingresados. (Puede configurar la biblioteca de readline bastante, consulte la sección Edición de línea de comando del Bash manual para más detalles).
Bash en sí tiene el buildin
complete
para definir un mecanismo de finalización para comandos individuales. Si para el comando actual no se define nada, utilizó la terminación por nombre de archivo (utilizando opendir / readdir, como dijo Ignacio).La parte para definir sus propias terminaciones se describe en la sección Terminación programable . En resumen, con el
complete «options» «command»
define la finalización de algún comando. Por ejemplocomplete -u su
dice que al completar un argumento para el comandosu
, busque usuarios del sistema actual .Si esto es más complicado de lo que pueden cubrir las opciones normales (por ejemplo, diferentes terminaciones según el índice del argumento o según los argumentos anteriores), puede usar la
-F function
, que invocará una función de shell para generar la lista de posibles finalizaciones. (Esto se usa, por ejemplo, para la finalización de git, que es muy complicada, dependiendo del subcomando y algunas veces de las opciones dadas, y del uso de nombres de ramas (que no son nada que Bash sepa).
Puede enumerar las terminaciones existentes definidas en su entorno bash actual simplemente con complete
, para tener una impresión de lo que es posible. Si tiene instalado el paquete bash-completion (o el nombre en su sistema), se completan las terminaciones para una gran cantidad de comandos, y como dijo Wrikken, / etc / bash_completion contiene un script bash que a menudo se ejecuta al iniciar el shell para configurar esto Se pueden colocar scripts de finalización personalizados adicionales en /etc/bash_completion.d; todos provienen de / etc / bash_completion.
Si le interesan los conceptos básicos: Bash usa readline que presenta el historial y la finalización básica. Puede inspeccionar la fuente si desea obtener una comprensión detallada. Además, puede usar readline para construir sus propias interfaces CLI con finalización