モチベーション
cd ../../../../../../../ってタイプするの死ぬほどめんどくさいじゃん。
pushd、popdである程度は解決できるが、解決できない時もある。例えばtmuxやscreenとか使ってペインを作った時。
カレントディレクトリは引き継ぐけどpushdのディレクトリスタックは引き継がないため、
上位ディレクトリに行く時はcd ../../../../打つしかない。
ぐぐってもこれを解決しようとしている人には出会ったことがなかったから、自分で解決することにした。
コード
以下のコードをbashrcに貼って快適な生活を手に入れよう。
.bashrc
isNum() {
if [ $# -ne 1 ]; then
return 1
fi
expr "$1" + 1 >/dev/null 2>&1
if [ $? -ge 2 ]; then
return 1
fi
return 0
}
dirUp () {
hierarchy_path=""
isNum "$@"
if [ $? -eq 0 ]; then
for i in `seq 1 $1`
do
hierarchy_path=${hierarchy_path}"../"
done
\cd $hierarchy_path
else
\cd "$@"
fi
}
alias cd="dirUp"
How to use
$ pwd
/home/hugashy/project/hoge/bar/foo/
$ cd 3
$ pwd
/home/hugashy/project
cdコマンドの引数として数字を与えるとその数字分だけ上位ディレクトリに移動できる。
ダメな所
ディレクトリ名が数字のディレクトリに移動できない。
一応回避策は用意していて
数字ディレクトリ名への移動
$ cd 3 適当な文字列
と数字の後に1つ適当な引数を加えてやると正しく数字のディレクトリに移動できる。
というよりは「cdの引数が1個の場合、かつ数字の場合」という条件で上位ディレクトリに移動させているだけなので、その条件から外れる場合は普通のcdと同じ。
最後に
あんまり綺麗な実装じゃないけど、../../../../../../のストレスから開放される喜びを皆さんにも体験していただきたい。