首页 > 解决方案 > 替代另一个命令的 bash 完成脚本

问题描述

我想制作一个“完成脚本”,将虚拟命令 ( g) 替换为另一个命令 ( cd)。

我想g dl<Tab>动态转换成cd ~/dl/.

别名不是我想要的,因为我想继续输入。的参数是使用键/值存储g检索的

我试图为数组赋值$COMP_WORDS以更改用户编写的文本,但它不起作用:

_g_completions() {
    local FILE="$HOME/.config/kv.awk/bookmarks.txt"
    local COMPLEN="${#COMP_WORDS[@]}"
    if [ "${COMP_WORDS[$COMP_CWORD]}" -lt 3 ]
    then
        # list keys
        COMPREPLY=($(compgen -W "$(awk '/^[A-Za-z]/ {print tolower($1)}' "$FILE")" -- "$CURRENT"))
    else
        # subsitute command
        COMP_WORDS[0]="cd"
        COMP_WORDS[1]="$(kv.awk bookmarks get "${COMP_WORDS[1]}")"
    fi
}

complete -F _g_completions g

标签: bashautocompletetab-completion

解决方案


推荐阅读