Masatoshi Ito の備忘録

旧Blog(goo blog)のアーカイブです。
goo blogの閉鎖に伴い、アーカイブとして移行することにしました。
古い情報やリンク切れなどがあると思いますが、ご了承ください。

cd の履歴を持たせる bashrc

(2009年07月23日 19時18分28秒|Zaurus/環境設定

以前、私が職場で使用していたUNIX環境で、cdコマンドのディレクトリ移動の履歴を残せるコマンドのaliasがcsh用に作られていました。
丁度、Windowsのエクスプローラの「進む」や「戻る」をコマンドで実行するようなものでした。
元は雑誌からの引用だったようですが、1990年代位の日付がコメントに入っていたと思います。
結構、そのコマンドに慣れていましたので、その機能を思い出しながら、今Zaurusで使用しているbashで実現してもました。
pushdやpopd等を素直に使用すればいいのかもしれませんが、「進む」機能がないというのと、手になじんでいるということで…。

コマンドは以下の通りです。

cd
aliasで置き換えていますが、そのままディレクトリ移動です。pushdのような機能も持たせています。

bd
一個前にいたディレクトリに移動します。popdやエクスプローラの「戻る」のような機能です。

nd
bdで戻る前のディレクトリに移動します。エクスプローラの「進む」のような機能です。

ds
ディレクトリの履歴を表示します。「p」はカレントディレクトリです。(「c」の方がよかったかも…。)bdは「0」から「9」の順に移動し、ndは「9」から「0」の順に移動します。

以下、bashrcの抜粋です。

# cd history
alias cd=chdir
function chdir {
	if [ -r "$1" -a -d "$1" -o "$1" = "" ] ; then
		local i
		for i in 8 7 6 5 4 3 2 1 0 ; do
			dirstack[$i+1]=${dirstack[$i]}
		done
		dirstack[0]=`pwd`
		\cd $1
	fi
	pwd
}
function ds {
	echo "p:"`pwd`
	local i
	for i in 0 1 2 3 4 5 6 7 8 9 ; do
		echo "$i:${dirstack[$i]}"
	done
}
function bd {
	dirstack[10]=`pwd`
	\cd ${dirstack[0]}
	local i
	for i in 0 1 2 3 4 5 6 7 8 9 ; do
		dirstack[$i]=${dirstack[$i+1]}
	done
	pwd
}
function nd {
	dirstack[10]=`pwd`
	\cd ${dirstack[9]}
	local i
	for i in 8 7 6 5 4 3 2 1 0 ; do
		dirstack[$i+1]=${dirstack[$i]}
	done
	dirstack[0]=${dirstack[10]}
	pwd
}