如何编写 bash 补全程序来补全从 ~/ 开始的导演姓名

如何编写 bash 补全程序来补全从 ~/ 开始的导演姓名

假设我有一个名为 的 bash 脚本,myscriptecho的第一个参数是目录名。
使用示例:例如,目录位于
myscript proj1
哪里,当前工作目录是。 我的问题是,对于这个脚本,我如何编写完成规则,以便列出从 开始的所有可用的目录。这意味着在第一个例子中,假设这些是 处的唯一目录,将表达式完成为。 有人能帮我实现这个吗? proj1~/folder1/folder2/proj1~/
myscript [tab][tab]echo~/~/myscript pro[tab]myscript proj1

提前致谢。

答案1

你的描述似乎很奇怪:如果你得到的只是proj1,你怎么知道它的父目录是什么?

无论如何,为了满足您的要求:

# for me, this takes a looooooong time [1]. Do it once and cache it
mapfile -t _all_dir_names < <( find ~ -type d -printf "%f\n" )

# the function you want completion for
myfunc () { echo hello world $*; }

# the completion function
complete_myfunc() {
    local dir cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=()
    for dir in "${_all_dir_names[@]}"; do
        if [[ $dir == "$cur"* ]]; then
            printf -v dir "%q" "$dir"      # protect whitespace in the dir name
            COMPREPLY+=("$dir")
        fi
    done
}

# registering the completion
complete -F complete_myfunc myfunc

[1]:2 分钟,66782 个目录

相关内容