# ======================================================================
# A replacement for the built-in cd command which understands multiple
# dots. For example:
#
# cd ... # Up 2 levels
# cd .... # Up 3 levels
# cd ..... # Up 4 levels
# ======================================================================
function cd() {
if [[ "$1" =~ ^\.\.\.+$ ]]
then
# Case: The argument contains 3 or more dots and no other chars
local levels=${1/./} # How many levels to go up
local destination=. # The final destination
# Each time we go through the loop, we go up one level and
# remove one dot from levels
while [[ -n $levels ]]
do
destination=$destination/..
levels=${levels/./}
done
cd $destination
else
# If the argument does not contain 3 or more dots, we will treat
# it as a regular case
builtin cd "$@"
fi
ls # Nice to have
}
Comments