bash関数を定義しようとしていますmycd
。この関数は連想配列を使用しますmycdar
。キーが配列に存在する場合、関数はディレクトリをキーの対応する値に変更します。キーが存在しない場合は、コマンドラインで指定されたディレクトリに変更されます。
私がやりたいのは、関連付けられた配列の両方のキーから、または現在のディレクトリに存在するフォルダから、この関数を完成させることです。
ありがとうございました。
bash関数を定義しようとしていますmycd
。この関数は連想配列を使用しますmycdar
。キーが配列に存在する場合、関数はディレクトリをキーの対応する値に変更します。キーが存在しない場合は、コマンドラインで指定されたディレクトリに変更されます。
私がやりたいのは、関連付けられた配列の両方のキーから、または現在のディレクトリに存在するフォルダから、この関数を完成させることです。
ありがとうございました。
最初のコマンド:
mycd() { [ "${mycdar[$1]}" ] && cd "${mycdar[$1]}" || cd "$1"; }
2番目の完了コマンド
_mycd() {
local cur;
_cd ;
_get_comp_words_by_ref cur;
COMPREPLY=($(
printf "%s\n" "${!mycdar[@]}" |
grep ^$cur)
${COMPREPLY[@]});
}
1つのアレイ:
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
ただし、これはパス配列に対しては機能しません。
求められていることを正確に実行する完全な機能に対するオプションがあることがわかりました。
complete -o plusdirs -o nospace -F _mycd mycd
この場合_mycd
、連想配列のキーから一致する要素を返すだけです。