Imagine que tengo un comando 'comando' que toma argumentos foo: bar foo: foo bar: bar o bar: foo Puedo escribir un script de finalización de línea de comando que puedo obtener en mi entorno para darme un aspecto similar al siguiente:
function _command_opt()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="foo:bar foo:foo bar:bar bar:foo"
if [[ ${prev: -7} == 'command' ]]
then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) );
return 0;
fi
}
complete -F _command_opt -o bashdefault -o default 'command'
Sin embargo, si command f[tab][tab]
escribo, obtengo foo: bar y foo: foo en la lista, pero ninguno de los dos se completa en mi línea de comando (porque todavía no son distintos. Lo que me gustaría lograr es que esto produzca command foo:
y deje mi cursor al final de la palabra actual (en lugar de añadir un espacio) para permitir que yo escribo a continuación, b
o f
y luego pestaña de nuevo para terminar el comando el problema ejemplo es sólo para mostrar lo que quiero decir ... el verdadero caso el prefijo:. combinaciones de sufijos son bastante largos , por lo que la finalización parcial sería realmente beneficiosa, por ejemplo, 25 comandos diferentes que comienzan con el prefijo translationupdateprocess: y translationupdateprocess es uno de los 25 prefijos diferentes igualmente largos con tantas opciones.
¿Alguien sabe de una manera de completar bash para operar de esta manera?
fuente