Dentro de mi archivo de finalización de bash, estoy buscando cadenas de finalización mediante un script externo, lo que lleva algún tiempo (1-2 segundos). Dado que estas cadenas permanecen mayormente igual durante el resto del tiempo que se ejecuta el shell actual, quiero almacenarlas en caché y cuando la ejecución del Bash se desencadene la próxima vez, debe usar la cadena almacenada en caché en lugar de la costosa búsqueda, para que complete inmediatamente cuando se ejecuta la segunda vez.Cómo almacenar en caché una variable utilizada dentro de un script de finalización de bash para la sesión actual
Para tener una idea acerca de la finalización de archivos, aquí es la parte importante del archivo de ejecución:
getdeployablefiles()
{
# How can i cache the result of 'pbt getdeployablefiles'
# for the time the current shell runs?
echo `pbt getdeployablefiles`
}
have pbt &&
_pbt_complete()
{
local cur goals
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
goals=$(getdeployablefiles)
COMPREPLY=($(compgen -W "${goals}" -- $cur))
return 0
} &&
complete -F _pbt_complete pbt
¿Cómo puedo almacenar en caché la salida del getdeployablefiles para el resto de la sesión de shell? Necesito algún tipo de variable global aquí, o algún otro truco.
Solución:
sólo tenía que hacer goals
no local y pregunte si está configurado. El guión final:
getdeployablefiles()
{
echo `pbt getdeployablefiles`
}
have pbt &&
_pbt_complete()
{
local cur
if [ -z "$_pbt_complete_goals" ]; then
_pbt_complete_goals=$(getdeployablefiles)
fi
_pbt_complete_goals=$(getdeployablefiles)
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=($(compgen -W "${_pbt_complete_goals}" -- $cur))
return 0
} &&
complete -F _pbt_complete pbt
Sabía que tenía que haber algo mal con mi script. Hacer objetivos no globales y preguntar si se ha solucionado en realidad resolvió el problema. ¡Gracias! – ifischer