如何将带参数的函数传递给另一个函数
How to pass a function with arguments to another function
我正在尝试制作一个通用的自动完成功能(它实际上需要几个参数,并且有一堆共享逻辑),这样我就可以轻松而整洁地维护一长串类似的命令,具有类似的自动完成功能(参数数量等)。
我有一个 bash 函数,它接受一个参数(尽可能简化):
_autocomplete() {
COMPREPLY=( $(compgen -W "" -- "${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 "" -- "${COMP_WORDS[COMP_CWORD]}") )
for reply in "${COMPREPLY[@]}"
do
printf '%s\n' "$reply"
done
return 0
}
complete -C "_autocomplete example_param" some_function
我正在尝试制作一个通用的自动完成功能(它实际上需要几个参数,并且有一堆共享逻辑),这样我就可以轻松而整洁地维护一长串类似的命令,具有类似的自动完成功能(参数数量等)。
我有一个 bash 函数,它接受一个参数(尽可能简化):
_autocomplete() {
COMPREPLY=( $(compgen -W "" -- "${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 "" -- "${COMP_WORDS[COMP_CWORD]}") )
for reply in "${COMPREPLY[@]}"
do
printf '%s\n' "$reply"
done
return 0
}
complete -C "_autocomplete example_param" some_function