gpt4 book ai didi

bash - 自动完成提升程序选项

转载 作者:行者123 更新时间:2023-11-29 09:15:26 24 4
gpt4 key购买 nike

经过几个小时的搜索,我终于写出了我的第一个 stackoverflow 问题。

我想为 bash 脚本创建一个完成函数,到目前为止还不错 ;)。此 bash 脚本调用其他具有自动完成功能的可执行文件。

例子:

$ my_script foo par
# calls /usr/local/libexec/my_script/foo par

自动完成 my_script 的第一个参数(在本例中为“foo”)有效,因为可能的选项是文件夹“/usr/local/libexec/my_script/”中的文件。此文件夹中的每个程序都有一个有效的自动完成功能,这是使用 boost::program_options 的副产品。

我现在想通过引用将要调用的程序的自动完成来实现my_script的下一个参数的自动完成。

$ my_script foo <tab>
# should output possible options to the foo subcommand
# like /usr/local/libexec/my_script/foo <tab>

我从这个答案开始 Bash completion from another completion ,但是 _command_command_offset 1 似乎对我不起作用。

  • 如何获取 foo 的选项,以及如何在 my_script 中使用它?

我当前的 /etc/bash_completion.d/my_script 如下所示

_my_script()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"

if [[ "$COMP_CWORD" == 1 ]]; then
# 1. param: for program to be loaded
for i in $( ls /usr/local/libexec/my_script/ ); do
opts="${opts} ${i} "
done
COMPREPLY=( $(compgen -W "${opts}" ${cur}) )
else
# next param: of the program to be loaded

# how do I get the options of "foo" here?

fi

return 0
}
complete -F _my_script my_script

最佳答案

我一看到你的问题,就想到了 sudogit 的完成。它们都具有您想要的相似行为。所以我寻找他们的完成功能。这是您遗漏的行:

local root_command=${COMP_WORDS[0]}
_command_offset 1

它是从 Ubuntu 16.04 中的 /usr/share/bash-completion/completions/sudo 复制而来的。我完全不知道它的意思。但它有效。

关于bash - 自动完成提升程序选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47598050/

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