50 lines
836 B
Bash
50 lines
836 B
Bash
|
# Better cd
|
||
|
# Usage: cd [full_path|partial_path|path_initials|-]
|
||
|
#
|
||
|
# Examples:
|
||
|
# ~/playground/ $ find . -type d
|
||
|
# .
|
||
|
# ./slides
|
||
|
# ./slides/small
|
||
|
# ./slides/huge
|
||
|
# ./swings
|
||
|
# ./swings/small
|
||
|
# ./swings/large
|
||
|
# ~/playground/ $ cd sl
|
||
|
# ~/playground/slides/ $ cd
|
||
|
# ~ $ cd p/s/h
|
||
|
# ~/playground/slides/huge $ cd ../..
|
||
|
# ~/playground/ $ cd -
|
||
|
# ~/playground/slides/huge $ cd -
|
||
|
# ~/playground/ $ cd s/s
|
||
|
# Warning: Multiple possible paths. Going to first path.
|
||
|
# ~/playground/slides/small $
|
||
|
|
||
|
function cd {
|
||
|
if [[ $# -eq 0 ]]; then
|
||
|
builtin cd
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
if [[ $# -gt 1 ]]; then
|
||
|
echo "too many arguments" >&2
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
# cd -
|
||
|
if [[ $1 == '-' ]]; then
|
||
|
builtin cd -
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
# Check for absolute path first
|
||
|
if [[ -d $1 ]]; then
|
||
|
builtin cd "$1"
|
||
|
return
|
||
|
fi
|
||
|
|
||
|
# If nothing works
|
||
|
echo "$1: No such directory." >&2
|
||
|
return 1
|
||
|
}
|