加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:33:11 所属栏目:安全 来源:网络整理
导读:在我的 Bash Completion文件中,我正在通过外部脚本查找完成字符串,这需要一些时间(1-2秒).由于这些字符串在当前shell运行的其余时间内大部分保持不变,我想缓存它们,并且当下次触发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也许?然后你可以检查它是否为空或未设置并在必要时设置它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读