Ответ 1
Сначала выполните команду:
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
.