标签: compgen

如何自动完成嵌套的多级子命令?

我正在尝试为我自己的命令集开发自动完成或制表符完整功能.

例如,假设foo是我的二进制文件:

CLI>> foo [TAB] [TAB]
Run Code Online (Sandbox Code Playgroud)

它应该显示主要命令configureshow.

然后如果我选择configure,它应该显示子命令CM,DSP并且NPU:

CLI>> foo configure [TAB] [TAB]
DSP NPU CM`
Run Code Online (Sandbox Code Playgroud)

我只知道如何完成并显示第一级 - 如何获得第二级?

我会把它放进去/etc/completion.d.

我的代码:

_foo()
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    words=("${COMP_WORDS[@]}")
    cword=$COMP_CWORD
    opts="configure show"
}
Run Code Online (Sandbox Code Playgroud)

我很卡如何添加子命令CM DSP NPUconfigure.

bash autocomplete tab-completion compgen

13
推荐指数
1
解决办法
3433
查看次数

在bash中列出文件中的所有变量

在编写bash脚本时,我喜欢编写自包含函数,这些函数接受参数并基于那些/那些参数执行操作,而不是在代码中的几个不同位置声明全局变量,从而降低可读性.

当您有一个需要使用多个变量的函数时,就会出现问题.将10个变量之类的函数传递给函数只是简单的丑陋,因此可以使用简单的关联数组.

如果我们想在外部文件上声明这些变量,那么"source"命令允许您将它们全部导入.

然后问题变成了,如何列出在此文件中仅声明的变量,以便我可以用它们构建我的关联数组?我已经能够使用"compgen"和循环的组合来构建变量列表中的关联数组,但是如何只列出文件中找到的变量,无论它们被调用什么,所以我可以循环他们并建立我的阵列?

bash shell associative-array compgen

7
推荐指数
1
解决办法
370
查看次数

列出 Windows 命令提示符中所有可用命令的命令

我想以编程方式获取 Windows 命令提示符 ( cmd.exe)中所有可用命令的列表。compgen -c在 Bash 中是否有类似的东西,但对于 Windows?

windows cmd compgen

5
推荐指数
1
解决办法
5720
查看次数

指定另一个目录来 compgen 自动完成目录,而不是使用 pwd

compgen -d -- $cur 将建议仅对 pwd 中的目录进行补全吗?

我可以让它在另一个目录中建议某些目录的目录完成吗?

例如。如果我在/curr_dir,并且我想为/other_dir我做什么生成目录完成?我如何指定它compgen,这样我就不需要去/other_dir

在我的 bash-completion 函数中,我尝试cd在调用之前对该目录执行 a操作,compgen但是在按下<Tab>.

bash bash-completion compgen

5
推荐指数
1
解决办法
1779
查看次数

如何将 bash `compgen` 与我自己的脚本选项一起使用?

我是新手compgen,想将它用于我正在编写的脚本。该脚本可以将“命令”和“选项”作为参数,如下所示:

script add "value"
script --path "/a/file/path" add "value"
# and others
Run Code Online (Sandbox Code Playgroud)

我写了一个完成脚本,如下所示:

_script_completions() {
    arg_index="${COMP_CWORD}"
    if [[ "${arg_index}" -eq 1 ]]; then
        COMPREPLY=($(compgen -W "--path add" "${COMP_WORDS[1]}"))
    fi
}
complete -F _script_completions script
Run Code Online (Sandbox Code Playgroud)

该脚本对于“add”命令运行良好,但在“--path”选项上失败。例如:当我输入:

$ script --p<TAB>
Run Code Online (Sandbox Code Playgroud)

我得到:

$ ./script --pbash: compgen: --: invalid option
compgen: usage: compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]
Run Code Online (Sandbox Code Playgroud)

如何正确添加我自己的脚本选项的补全?

bash shell bash-completion compgen

2
推荐指数
1
解决办法
995
查看次数