タブ補完を使用できます。多くのLinuxディストリビューションでは、デフォルトでbashが設定されているため、[TAB]キーを押すと、一致する可能性のあるリストが表示されます。一致するものが1つだけの場合はすべて入力されます。cdの場合、これは通常、現在の作業ディレクトリのサブディレクトリのリストです。それを上書きすることもできますが、代わりjd
に「ジャンプディレクトリ」のようなエイリアスを作成することをお勧めします。
alias jd=cd
そして、jdの補完として必要な「ブックマーク」を定義します。より多くのオプション(コマンドまたは関数から結果をその場で自動生成することを含む)については、bashのマニュアルページをご覧ください。しかし、最も簡単な方法は、次のような単語のリストです-W
。
complete -W "/ srv / www〜/ tmp〜/ work" jd
ここで、jd
[TAB]を入力してヒットすると、「ブックマーク」が表示されます。あいまいな部分を入力し、[TAB]を押して完了します。(上記では、~
sは私のホームディレクトリに展開されるため、最初の[TAB]はを提供し/
、w
もう一度[TAB]を押す/srv/www
と入力されます。)
もちろん、これを~/.bash_profile
永続化するために入れます。
または、これを次のレベルに進めることができます。ディレクトリを作成します~/.shortcuts
-ドットで始まり、非表示になり、きれいなホームディレクトリをめちゃくちゃにしないでください-そして、目的のディレクトリへのシンボリックリンクでそれを埋めます。次に、これを〜/ .bash_profile に入れます:
_list_shortcuts()
{
COMPREPLY=($( compgen -W "$( ls ~/.shortcuts )" -- ${COMP_WORDS[COMP_CWORD]} ))
}
jd()
{
cd -P ~/.shortcuts/$1
}
complete -F _list_shortcuts jd
これは、_list_shortcuts
名前のリストを作成するjd
ための機能のやや複雑な補完を定義し、単なるエイリアスではなく関数になりcd
ます。-P
フラグcd
すべてが透明魔法になるように、それは、シンボリックリンクを解決します。ショートカット名はターゲットと一致する必要さえありません。
そう:
$ ls -l ~/.shortcuts/
total 0
lrwxrwxrwx. 1 mattdm mattdm 16 Dec 17 19:44 tmp -> /home/mattdm/tmp
lrwxrwxrwx. 1 mattdm mattdm 17 Dec 17 19:44 WORK -> /home/mattdm/work
lrwxrwxrwx. 1 mattdm mattdm 8 Dec 17 19:44 www -> /srv/www
$ jd tmp
$ pwd
/home/mattdm/tmp
$ jd WORK
/home/mattdm/work
そして、追加の空想のために、jd
パラメータなしで実行されたときにすべてのショートカットをリストします:
jd()
{
if [[ -z "$1" ]]; then
(cd ~/.shortcuts; stat -c '%N' *)
else
cd -P ~/.shortcuts/$1
fi
}
注:後者は私にとって決して機能しないため、compgen -W $( cmd )
代わりに使用しますcompgen -C 'cmd'
。理由はわかりません。それは私自身の新しい質問かもしれません。:)