构建我自己的
我正在尝试定义bash函数, mycd
。此功能使用关联数组mycdar
。如果键存在在数组中,则函数将将目录更改为密钥的相应值。如果键不存在,它将更改为命令行中提供的DIR。
我想做的是从关联数组的两个键或当前目录中的文件夹中完成此功能的完成。
谢谢。
构建我自己的cd
功能
使用关联阵列存储一些路径。
首先命令:
mycd() { [ -v mycdar["$1"] ] && cd "${mycdar[$1]}" || cd "$1"; }
第二个完成命令
_mycd() {
local cur;
_cd ;
_get_comp_words_by_ref cur;
COMPREPLY=($(
printf "%sn" "${!mycdar[@]}" |
grep ^$cur)
${COMPREPLY[@]});
}
一个数组:
declare -A mycdar='(
["docs"]="/usr/share/doc"
["home"]="$HOME"
["logs"]="/var/log"
["proc"]="/proc"
["root"]="/"
["tmp"]="/tmp"
)'
比最终结合:
complete -F _mycd -o nospace mycd
或允许标准路径构建行为:
complete -F _mycd -o nospace -o plusdirs mycd
,事实证明,有一个选项可以完全执行所要求的操作:
complete -o plusdirs -o nospace -F _mycd mycd
在这种情况下,_mycd
只是从关联数组的键返回匹配元素。