接上文,bash下的dirs参数用法与zsh下稍微有点不同,下面是bash版本的goto实现,就dirs函数略有不同:
pushd() {
if [ $# -eq 0 ]; then
DIR="${HOME}"
else
DIR="$1"
fi
builtin pushd "${DIR}" > /dev/null
}
alias cd='pushd'
dirs() {
tmphash="/tmp/.dirs"
builtin dirs -p | awk '{
if (a[$1]=="") a[$1]=NR;
if (length(a)==10) exit
}END{for(i in a) print a[i],i}' |
sort -nk1 | cut -d' ' -f2- > $tmphash
nl $tmphash
}
goto() {
tmphash="/tmp/.dirs"
if [ ! -f $tmphash ]; then
echo "no record"
return 1
fi
if [ $# -eq 0 ]; then
return 1
fi
dest=`awk -v n=$1 'NR==n&&1' $tmphash`
if [[ $dest == "~" ]]; then
dest=${HOME}
elif [[ $dest == "~/"* ]]; then
dest="${HOME}/${dest:2}"
elif [[ $dest == "~"* ]]; then
dest=`eval "echo $dest"`
fi
pushd $dest
}