如何缓存当前会话的Bash完成脚本中使用的变量

前端之家收集整理的这篇文章主要介绍了如何缓存当前会话的Bash完成脚本中使用的变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的 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
为什么不将目标从本地语句中删除并将其重命名名称冲突可能性较低的事情,_pbt_complete_goals也许?然后你可以检查它是否为空或未设置并在必要时设置它.

猜你在找的Bash相关文章