2014年7月30日 星期三

[Linux command] Switch historical directory



Add following script into .bashrc

Type cd ,, will show all historical diectory which you been before.



cd ,,

0 /opt

1 ~

2 /home

If you want go to number 2.

Just press cd ,2, then will go to /home



cd_func ()
{
local x2 the_new_dir adir index
local -i cnt

if [[ $1 == ",," ]]; then
dirs
-v
return 0
fi

the_new_dir
=$1
[[ -z $1 ]] && the_new_dir=$HOME

if [[ ${the_new_dir:0:1} == ',' ]]; then
#
# Extract dir N from dirs
index
=${the_new_dir:1}
[[ -z $index ]] && index=1
adir
=$(dirs +$index)
[[ -z $adir ]] && return 1
the_new_dir
=$adir
fi

#
# '~' has to be substituted by ${HOME}
[[ ${the_new_dir:0:1} == '~' ]] && the_new_dir="${HOME}${the_new_dir:1}"

#
# Now change to the new dir and add to the top of the stack
pushd
"${the_new_dir}" > /dev/null
[[ $? -ne 0 ]] && return 1
the_new_dir
=$(pwd)

#
# Trim down everything beyond 11th entry
popd
-n +11 2>/dev/null 1>/dev/null

#
# Remove any other occurence of this dir, skipping the top of the stack
for ((cnt=1; cnt <= 10; cnt++)); do
x2
=$(dirs +${cnt} 2>/dev/null)
[[ $? -ne 0 ]] && return 0
[[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
if [[ "${x2}" == "${the_new_dir}" ]]; then
popd
-n +$cnt 2>/dev/null 1>/dev/null
cnt
=cnt-1
fi
done

return 0
}

alias cd=cd_func




Reference:



  1. Linux/Cygwin Tip: Change directory like a command line commando :)


Related Posts:

0 意見:

張貼留言