From 8a2dd5e49fd581f2f6c49bd18e2f8a5039f3b554 Mon Sep 17 00:00:00 2001 From: Ceda EI Date: Thu, 16 Jan 2020 14:27:49 +0530 Subject: [PATCH] Add cd.sh to behave like normal cd. --- cd.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 cd.sh 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 +}