He estado 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?¿Cómo funciona la finalización de la pestaña bash?
Respuesta
Hay dos partes en el autocompletado:
La biblioteca readline, como ya se ha mencionado por fixje, dirige la edición de línea de comandos, y vuelve a llamar a bash cuando se presiona la pestaña, para habilitar la finalización. Bash entonces da (ver siguiente punto) una lista de terminaciones posibles, y readline inserta tantos caracteres como se identifican de forma inequívoca por los caracteres ya escritos en. (Se puede configurar la biblioteca readline bastante mucho, consulte la sección Command line editing del manual del golpe de detalles)
Bash 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 a definir sus propias terminaciones se describe en la sección Programmable Completion. En resumen, con
complete «options» «command»
define la finalización de algún comando. Por ejemplocomplete -u su
dice al completar un argumento para el comandosu
, la búsqueda de los usuarios del sistema actual.Si esto es más complicado que los opciones normales pueden cubrir (por ejemplo, diferentes terminaciones en función de índice de discusión, o en función de los argumentos anteriores), puede utilizar
-F function
, que a su vez invocar una función de línea para generar la lista de posibles terminaciones. (Esto se utiliza, por ejemplo, para la realización de git, que es muy complicado, dependiendo de subcomando ya veces sobre las opciones dado, y utilizando a veces nombres de ramas (que no son otra fiesta conoce).
Usted puede enumerar las terminaciones existentes definidos en el entorno de fiesta actual utilizando simplemente complete
, para tener una impresión de lo que es posible. Si tiene instalado el paquete bash-finalización (o como se denomina en el sistema), terminaciones para un montón de comandos están instalados, y como dijo Wrikken,/etc/bash_completion contiene un script bash que a menudo se ejecuta al inicio del shell para configurarlo. Se pueden colocar scripts de finalización personalizados adicionales en /etc/bash_completion.d; todos provienen de/etc/bash_completion.
Si está interesado en los conceptos básicos: Bash usa readline que muestra el historial y la finalización básica. Puede inspeccionar la fuente si desea obtener una comprensión detallada. Además, puede utilizar readline para construir sus propias interfaces CLI con la finalización
- 1. Finalización de la pestaña IPython no funciona
- 2. Habilitar la finalización de la pestaña bash para Mercurial (hg)
- 3. finalización de la pestaña bash sin expansión variable?
- 4. Finalización de la pestaña Bash agrega espacio extra después de la primera finalización
- 5. finalización de la pestaña cygwin
- 6. ¿Cómo puedo hacer que la finalización de la pestaña bash se comporte como la finalización de la pestaña vim y recorrer las coincidencias coincidentes?
- 7. Cómo evitar que la finalización de bash reemplace un carácter cuando se completa la pestaña
- 8. Problema de finalización de la pestaña PowerShell
- 9. jQuery UI Autocompletar: ¿Desactiva la finalización de la pestaña?
- 10. Finalización de la pestaña de Python en Windows
- 11. finalización de la pestaña python Mac OSX 10.7 (Lion)
- 12. ¿Cómo se implementaría la finalización de pestañas tipo bash?
- 13. ¿Cómo habilitar la finalización de la pestaña del archivo git con zsh compinit?
- 14. finalización Bash para Maven escapa de colon
- 15. ¿Cómo funciona la expansión del parámetro Bash?
- 16. La pestaña de Emacs no funciona
- 17. mit-scheme REPL con el historial de línea de comandos y la finalización de la pestaña
- 18. Finalización de Bash de nivel múltiple
- 19. Python argparse y finalización de bash
- 20. Cómo establecer 4 pestaña espacio en bash
- 21. Espacio final condicional con finalización programable bash
- 22. ¿La finalización automática de NetBeans del archivo incluido no funciona?
- 23. Cómo descartar la sugerencia de finalización
- 24. Z-index no funciona en la pestaña de Samsung Galaxy?
- 25. Delphi-IDE: ¿cómo cambiar la forma en que funciona la finalización de clase?
- 26. La pestaña IU de Jquery no funciona en AngularJS
- 27. Cómo habilitar la finalización automática en IRB de Ruby
- 28. ¿Cómo implemento la finalización de pestañas en el shell node.js?
- 29. ¿Cómo puedo forzar la finalización de urllib2?
- 30. Prueba unitaria para el guión de finalización de Bash
Es posible que desee comprobar '/ etc/bash_completion' (al menos, eso es donde una gran cantidad de la magia está en Debian). – Wrikken
@Wrikken: eso es bash_completion, que depende de la finalización de la pestaña, pero no del todo como sucede. –
También hay varias preguntas sobre el StackExchange * nix, entre ellos: http://unix.stackexchange.com/questions/4738/an-easy-bash-completion-tutorial http://unix.stackexchange.com/questions/1800/custom-autocomplete http://unix.stackexchange.com/questions/12356/how-does-tab-auto-complete-find-options-to-complete y al menos uno en SU: http://superuser.com/ preguntas/289539/custom-bash-tab-completion – Cascabel