gpt4 book ai didi

bash - 是否可以从外部完成命令动态修改 compopts?

转载 作者:IT王子 更新时间:2023-10-29 02:07:00 24 4
gpt4 key购买 nike

我正在用 Golang 编写一个 bash 补全程序。事实上,该程序是它自己的完成程序,因为它会查找 COMP_LINE 环境变量,如果存在,它会输出完成选项,如果不存在,则继续运行主程序。

完成后安装如下:

complete -C /path/to/my-program my-program

这很好用。对于我的大部分补全,我希望在单词完成后添加一个空格,但是对于一些标志,我不希望出现这种情况。

定义完成后,您可以设置一个-o nospace 选项来在完成单词时省略尾随空格。但是,所有需要空格的补全都必须明确添加到补全单词列表中。

有什么方法可以让我的程序根据返回的完成情况动态修改完整的选项?这是否公开为完成命令可以设置的环境变量?

我想避免在所有其他完成中附加一个空格,只是为了避免在边缘情况下出现一个我不希望这种情况发生的标志。

最佳答案

我的 Perl 框架 ( Perinci::CmdLine ) 也做同样的事情:脚本是它们自己完成的,使用完整的 -C SCRIPTNAME SCRIPTNAME 激活(当脚本在 PATH 中时)。与使用 shell 函数相比,使用外部命令完成有其优点和缺点。为了解决您遇到的问题,我输出了一个带有额外空格的虚拟答案。由于有多个答案,bash 不再自动添加空格。因此,不仅仅是返回(以 JSON 表示法):

["-o"]

你返回:

["-o","-o "]

我在完成路径时也使用了这个技巧。为了允许用户通过“向下钻取”完成路径,当有一个目录匹配时,我输出:

["dirname/","dirname/ "]

因此用户可以再次使用 Tab 键来向下钻取内部路径,而不是在“dirname/”之后获得一个空格并且必须再次退格并再次使用 Tab 键。

关于bash - 是否可以从外部完成命令动态修改 compopts?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55842705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com