Cuando uso el programa like svny escribo en Gnome Terminal:
svn upd
y presiona Tabse autocompleta para:
svn update
¿Es posible hacer algo así en mi script bash personalizado?
bash
auto-completion
Adaptador UA
fuente
fuente

Respuestas:
Puede usar la finalización programable . Mira
/etc/bash_completiony/etc/bash_completion.d/*para algunos ejemplos.fuente
/usr/share/bash-completion/completions/<program>The provided link has that already- Podría ser hoy, pero podría no ser mañana. O el año que viene. O en una década. Independientemente de lo que sugiera sobre la documentación que sigue siendo relevante, Stack Overflow desalienta las respuestas de solo enlace por estos motivos.Llego seis meses tarde pero estaba buscando lo mismo y encontré esto:
Tendrás que crear un nuevo archivo:
Para un autocompletado estático (
--help/--verbosepor ejemplo) agregue esto:COMP_WORDSes una matriz que contiene todas las palabras individuales en la línea de comando actual.COMP_CWORDes un índice de la palabra que contiene la posición actual del cursor.COMPREPLYes una variable de matriz desde la cual Bash lee las posibles terminaciones.Y el
compgencomando devuelve la matriz de elementos de--help,--verbosey--versioncoinciden con la palabra actual"${cur}":Fuente: http://www.debian-administration.org/articles/316
fuente
-y mostrarlas sin tener que comenzar a escribir la palabra objetivo, simplemente elimine las líneasif [...] thenyfi./etc/bash_completion.d/. Solo vine aquí porque quería publicar una respuesta en alguna parte, pero resultó que alguien tenía tres años de ventaja todo el tiempo :) Ejemplo claro, conciso y completo, ¡gracias!Todas las terminaciones de bash se almacenan en
/etc/bash_completion.d/. Entonces, si está creando software con bash_completion, valdría la pena que deb / make install suelte un archivo con el nombre del software en ese directorio. Aquí hay un script de finalización de bash de ejemplo para Rsync:Probablemente valdría la pena revisar uno de los archivos de finalización de bash que más se ajuste a su programa. Uno de los ejemplos más simples es el
rrdtoolarchivo.fuente
source ~/.local/mycrazycompletionen tu~/.bashrcpkg-config --variable = completionsdir bash-completar` y ese directorio es la recomendación dada por las preguntas frecuentes de finalización de Bash vinculadas anteriormente.Aquí hay un tutorial completo.
Tengamos un ejemplo de script llamado admin.sh en el que le gustaría tener el autocompletado funcionando.
Opción de nota lista corta. Al llamar al script con esta opción, se imprimirán todas las opciones posibles para este script.
Y aquí tienes el script de autocompletar:
Tenga en cuenta que el último argumento para completar es el nombre del script al que desea agregar autocompletado. Todo lo que necesita hacer es agregar su secuencia de comandos de autocompletar a bashrc como
o cópielo a /etc/bash.completion.d
fuente
prevvariable? Parece que no lo usas.-o nospaceopción?Si todo lo que desea es un autocompletado basado en palabras (para que no se complete el subcomando ni nada), el
completecomando tiene una-Wopción que simplemente hace lo correcto.Por ejemplo, tengo las siguientes líneas en mi
.bashrcpara completar automáticamente un programa llamado jupyter :Ahora se
jupyter <TAB> <TAB>autocompleta para mí.Los documentos en gnu.org son útiles.
Parece depender de que la
IFSvariable se configure correctamente, pero eso no me ha causado ningún problema.Para agregar la finalización del nombre de archivo y la finalización predeterminada de BASH, use la
-oopción:Para usar esto en zsh, agregue el siguiente código antes de ejecutar el
completecomando en su~/.zshrc:fuente
bash jupyter <TAB><TAB>?