Cuando uso el programa like svn
y 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_completion
y/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
/--verbose
por ejemplo) agregue esto:COMP_WORDS
es una matriz que contiene todas las palabras individuales en la línea de comando actual.COMP_CWORD
es un índice de la palabra que contiene la posición actual del cursor.COMPREPLY
es una variable de matriz desde la cual Bash lee las posibles terminaciones.Y el
compgen
comando devuelve la matriz de elementos de--help
,--verbose
y--version
coinciden 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 [...] then
yfi
./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
rrdtool
archivo.fuente
source ~/.local/mycrazycompletion
en tu~/.bashrc
pkg-c
onfig --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
prev
variable? Parece que no lo usas.-o nospace
opción?Si todo lo que desea es un autocompletado basado en palabras (para que no se complete el subcomando ni nada), el
complete
comando tiene una-W
opción que simplemente hace lo correcto.Por ejemplo, tengo las siguientes líneas en mi
.bashrc
para 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
IFS
variable 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
-o
opción:Para usar esto en zsh, agregue el siguiente código antes de ejecutar el
complete
comando en su~/.zshrc
:fuente
bash jupyter <TAB><TAB>
?