Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定bash tabcompletion中的最终字符_Python_Bash_Python Click - Fatal编程技术网

Python 确定bash tabcompletion中的最终字符

Python 确定bash tabcompletion中的最终字符,python,bash,python-click,Python,Bash,Python Click,我想确定最后一个字符是否是空格 $ mycli fl[TAB] # no space flag flare $ mycli flare [TAB] # yes space A B C D 理由 如果它是一个空格,则each参数用于确定完成提示,但如果它不是一个空格,则前一个参数将用于确定最后一个完成提示。我只需要知道在我用来计算完成度的Python脚本中采用哪条路径 _mycli () { COMPREPLY=(); local cur=${COMP_WORDS[COMP_CWO

我想确定最后一个字符是否是空格

$ mycli fl[TAB]  # no space
flag flare
$ mycli flare [TAB]  # yes space
A B C D
理由 如果它是一个空格,则each参数用于确定完成提示,但如果它不是一个空格,则前一个参数将用于确定最后一个完成提示。我只需要知道在我用来计算完成度的Python脚本中采用哪条路径

_mycli () {
  COMPREPLY=();

  local cur=${COMP_WORDS[COMP_CWORD]}
  local opts=$(mycli tabcompletion $COMP_LINE)
  COMPREPLY=($(compgen -W "${opts}" $cur))

  return 0
}

complete -F _mycli -o bashdefault mycli
这可能超出了问题的范围,这里是Python脚本的什么部分

@mycli.command()
@click.argument("arguments", nargs=-1, required=False)
def tabcompletion(arguments):
    # Discard `mycli tabcompletion`
    arguments = list(arguments)[2:]

    complete = False
    if ???:
       complete = True

我希望以某种方式确定(这个???部分)一个参数是否完成,或者是否为它提供完成的条件。

空格表示前一个单词的结束和新单词的开始。因此,在第一种情况下,
cur
将是
fl
,在第二种情况下是空字符串。

在出现更好的情况之前,我是如何解决的

  • 去掉
    $COMP_行的最后一项
  • 将项目传递给Python脚本
  • 如果项目长度为1,则假定该项目不完整,例如dinosau[TAB]
  • 否则,它将具有一个单词的长度,例如恐龙
  • 示例

    _be () {
      COMPREPLY=();
    
      local cur=${COMP_WORDS[COMP_CWORD]}
    
      if [ ${COMP_CWORD} -ge 2 ]; then
        if [ ${COMP_WORDS[1]} == "in" ]; then
          local opts=$(be tab $COMP_LINE ${COMP_LINE: -1})
          COMPREPLY=($(compgen -W "${opts}" $cur))
        fi
      fi
    
      return 0
    }
    
    complete -F _be -o bashdefault be
    

    我不完全理解它,其中一个限制是我无法完成由单个字符组成的项目,这并不理想,但对于原型来说还行。

    谢谢,直到我发布后才看到您的回复。我来看看你的这个方法。