Bash Tamamlama dosyamda, tamamlama dizelerini bir dış komut dosyasıyla buluyorum, bu da biraz zaman alıyor (1-2 saniye). Bu dizgiler çoğunlukla geçerli kabuk çalıştığı zamanın geri kalanı için aynı kaldığı için, bunları önbelleğe almak istiyorum ve bir sonraki sefer Bash tamamlaması tetiklendiğinde, pahalı arama yerine önbelleğe alınmış dizeyi kullanması gerekir, böylece tamamlanır ikinci kez koştuğunda hemen.Geçerli oturum için Bash Tamamlama Komut Dosyası içinde kullanılan bir değişkeni önbellekleme nasıl yapılır
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
Nasıl kabuk oturumunun kalanında getdeployablefiles çıktısını önbelleğe alabilir:
tamamlama dosyası tarafından hakkında bir fikir edinmek için buraya tamamlama dosyasının önemli bir parçasıdır? Burada bir çeşit küresel değişkene ya da başka bir numaraya ihtiyacım var.Çözüm:
Sadece goals
yerel olmayan yapmak ve ayarlandıktan sormak zorunda kaldı. Nihai komut dosyası:
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
Komut dosyasının kendisinde bir sorun olması gerektiğini biliyordum. Küresel olmayan hedefler koymak ve ayarlanmış olup olmadığını sormak sorunu gerçekten çözdü. Teşekkürler! İlginç bir yaklaşım için – ifischer