1

我正在尝试定义一个 bash 函数,mycd. 此函数使用关联数组mycdar。如果键存在于数组中,该函数会将目录更改为键的对应值。如果密钥不存在,它将更改为命令行中提供的目录。

我想做的是从关联数组的键或当前目录中存在的文件夹中完成此功能。

谢谢你。

4

2 回答 2

2

首先是命令:

mycd() { [ "${mycdar[$1]}" ] && cd "${mycdar[$1]}" || cd "$1"; }

二、补全命令

_mycd() {
    local cur;
    _cd ;
    _get_comp_words_by_ref cur;
    COMPREPLY=($(
        printf "%s\n" "${!mycdar[@]}" |
            grep ^$cur)
        ${COMPREPLY[@]});
    }

一个数组:

declare -A mycdar
mycdar['docs']=/usr/share/doc
mycdar['home']=$HOME
mycdar['logs']=/var/log
mycdar['proc']=/proc
mycdar['root']=/
mycdar['tmp']=/tmp

最后绑定:

complete -F _mycd -o nospace mycd

或允许标准路径构建行为:

complete -F _mycd -o nospace -o plusdirs mycd

mycdar但这对我们的路径数组不起作用。

于 2012-10-28T20:02:58.470 回答
1

事实证明,有一个选项可以完全按照所要求的完成功能:

complete -o plusdirs -o nospace -F _mycd mycd

在这种情况下_mycd,只需从关联数组的键中返回匹配的元素。

于 2012-10-28T23:53:52.520 回答