在我的
Bash Completion文件中,我正在通过外部脚本查找完成字符串,这需要一些时间(1-2秒).由于这些字符串在当前shell运行的其余时间内大部分保持不变,我想缓存它们,并且当下次触发Bash完成时,它应该使用缓存的字符串而不是昂贵的查找,以便它完成第二次运行时立即.
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
如何在shell会话的其余部分缓存getdeployablefiles的输出?我在这里需要某种全局变量,或者其他一些技巧.
解:
只需要制定非本地目标并询问它是否已设定.最后的剧本:
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