ちょっと深いけどよく移動するディレクトリに任意の短縮名を付けて、どこからでもディレクトリを移動できるようにしたら幸せじゃない?っていう趣旨のお話です。短縮名を定義すると同時に、タブ補完も効くようにしているので、極小タイプで移動、というイメージになります。
Linux / Mac 上の bash で動作する事を意図していますが、それ以外の環境であっても上手く変更すれば動くのではないでしょうか。bash についてそんなに詳しくも無いので、突っ込み歓迎です。
さてまずは、goto
コマンドの定義です。お手持ちの .bash_profile
やら .bashrc
やらに、下記の記述を追加して下さい。
if [ -e ~/.gotocache ]; then
rm -rf ~/.gotocache
fi
mkdir ~/.gotocache
if [ -e ~/.gotoconf ]; then
params=""
for line in `cat ~/.gotoconf | grep -v ^#`; do
key=`echo ${line} | cut -d '=' -f 1`
dir=`echo ${line} | cut -d '=' -f 2`
params="${params} ${key}"
echo ${dir} > ~/.gotocache/${key}
done
complete -W "${params}" goto
else
complete -W "" goto
fi
goto(){
if [ -e ~/.gotocache/${1} ]; then
dir=`cat ~/.gotocache/${1}`
cd ${dir}
else
cd ~
fi
}
Linux と Mac を前提にしていて、Mac にプリインストールされている bash のバージョンが 3 系列で、連想配列を使えないがゆえの実装になっています。
次に、ディレクトリの短縮名を定義するファイルを作ります。ホームディレクトリに .gotoconf
という名前で定義ファイルを作って下さい。
短縮名=パス
という書式で設定を記述し、#
から始まる行はコメントで、空行は無視します。自分が Mac で実際に使っている例(抜粋)を下記に載せます。
# Mac
applications=/Applications
# Home
home=/Users/Otchy
desktop=/Users/Otchy/Desktop
documents=/Users/Otchy/Documents
downloads=/Users/Otchy/Downloads
dropbox=/Users/Otchy/Dropbox
# Tomcat
tomcat=/Users/Otchy/workspace/apache-tomcat-7
tomcatconf=/Users/Otchy/workspace/apache-tomcat-7/conf
tomcatlogs=/Users/Otchy/workspace/apache-tomcat-7/logs
設定ファイルが書けたら、再ログインするか source ~/.bash_profile
するなどして、先ほどの goto
コマンドを有効化します。
するとターミナル上でカレントディレクトリを自分で定義した短縮名で移動することが出来るようになります。上記の例で言うと以下のようなイメージです。
$ goto ap<tab>
↓
$ goto applications<enter> -> cd /Applications
$ goto d<tab><tab>
desktop documents downloads dropbox
$ goto down<tab>
↓
$ goto downloads<enter> -> cd /Users/Otchy/Downloads
$ goto tom<tab>
↓
$ goto tomcat (ここで enter すれば cd /Users/Otchy/workspace/apache-tomcat-7)
$ goto tomcatl<tab>
↓
$ goto tomcatlogs<enter> -> cd /Users/Otchy/workspace/apache-tomcat-7/logs
Applications
のような大文字を含むディレクトリへの移動が楽、tomcat のケースのように階層化されたディレクトリの場合でも、短縮名を工夫すると、タブ補完しつつ任意の深さにすぐ飛べる、というあたりが大きなメリットかと思っています。