代码之家  ›  专栏  ›  技术社区  ›  bitmask

如何告诉'complete'返回默认值?

  •  4
  • bitmask  · 技术社区  · 6 年前

    complete

    complete -C './script.py --compgen "$@"' ./script.py
    

    --compgen 这告诉我的脚本自动完成。这个很好用。

    然而,在某些情况下,我希望能够从内部回到bash的默认行为 script.py . 有没有办法告诉我 它应该在不调用我的脚本的情况下重新运行并执行其默认操作?

    2 回复  |  直到 4 年前
        1
  •  4
  •   iBug    6 年前

    在Python代码中尝试以下操作:

    import os
    # if failed:
    os.system("bash -c 'compgen -o default'")
    
        2
  •  0
  •   bitmask    6 年前

    结果是,输出 compgen 从python脚本来看,它有一个缺点,即它是不可替换的。因此,如果用户试图完成一个文件名,如 a/b/c d.txt

    ./script.py a/b/c\ d.txt
    

    ./script.py a/b/c d.txt
    

    在点击标签后。其他扩张也会破裂。 这个 complete 然而:

    complete -C './script.py --compgen "$@"' -o default ./script.py
    #                                        ^^^^^^^^^^
    

    -C 第一部分,如果该部分返回零个匹配项,则要求默认完成,然后执行文件名解析等。

    我发现,通过将空字符串作为建议返回,甚至可以强制complete不提供任何建议。这防止了回退被运行,但它也不算是一个实际的建议完成,所以它不考虑空字符串。