【问题标题】:How to pass a function with arguments to another function如何将带参数的函数传递给另一个函数
【发布时间】:2019-05-17 00:38:07
【问题描述】:

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

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

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

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

complete -F "_autocomplete example_param" some_function

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

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

这是complete的限制吗?
有没有办法解决这个问题,或者更好的方法?

谢谢。

【问题讨论】:

  • 使用-C 指定命令。

标签: bash function parameters autocomplete


【解决方案1】:

-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

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2013-07-05
    • 2012-09-25
    • 2020-10-03
    相关资源
    最近更新 更多