gpt4 book ai didi

bash - 如何将带参数的函数传递给另一个函数

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

我正在尝试制作一个通用的自动完成功能(它实际上需要几个参数,并且有一堆共享逻辑),这样我就可以轻松而整齐地维护一长串类似的命令,具有类似的自动完成(数量参数等)。

我有一个 bash 函数,它接受一个参数(尽可能简化):

_autocomplete() {
COMPREPLY=( $(compgen -W "$1" -- "${COMP_WORDS[COMP_CWORD]}") )
return 0
}

当我引用它时,使用一个将函数名称作为参数的命令,我还想向它传递一个参数以在函数中运行:

complete -F "_autocomplete example_param" some_function

但是,当我点击 tab 键时这不起作用,而是出现以下错误:

some_function bash: completion: function `_autocomplete example_param' not found

这是complete的限制吗?
有什么解决办法或更好的方法吗?

谢谢。

最佳答案

-F 选项后面应该只跟一个函数名。如果要执行带选项的命令,需要使用-C。但是该命令需要将完成打印到标准输出,而不是设置 COMPREPLY。所以把函数改成:

_autocomplete() {
COMPREPLY=( $(compgen -W "$1" -- "${COMP_WORDS[COMP_CWORD]}") )
for reply in "${COMPREPLY[@]}"
do
printf '%s\n' "$reply"
done
return 0
}

complete -C "_autocomplete example_param" some_function

关于bash - 如何将带参数的函数传递给另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56178162/

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