以前、私が職場で使用していた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
}