diff --git a/cd.sh b/cd.sh new file mode 100644 index 0000000..68b1989 --- /dev/null +++ b/cd.sh @@ -0,0 +1,49 @@ +# 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 +}