From 0eca7eafffbd667b7e5f4d2423adb54ea5582165 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Fri, 26 May 2017 20:45:37 +1200 Subject: Tidy/golf gt() down a bit --- sh/shrc.d/gt.sh | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) (limited to 'sh') diff --git a/sh/shrc.d/gt.sh b/sh/shrc.d/gt.sh index c90af073..95ab4c2f 100644 --- a/sh/shrc.d/gt.sh +++ b/sh/shrc.d/gt.sh @@ -3,26 +3,24 @@ gt() { # Check argument count - if [ "$#" -gt 1 ] ; then - printf >&2 'gt(): Too many arguments\n' + if [ "$#" -ne 1 ] ; then + printf >&2 'gt(): Need one argument\n' return 2 fi - # Strip trailing slash - set -- "${1%/}" - - # If target doesn't have a leading slash, add PWD prefix - case $1 in - /*) ;; - *) set -- "${PWD%/}"/"$1" - esac + # Make certain there are no trailing slashes to foul us up, and anchor path + # if relative + while : ; do + case $1 in + */) set -- "${1%/}" ;; + /*) break ;; + *) set -- "$PWD"/"$1" ;; + esac + done # If target isn't a directory, chop to its parent [ -d "$1" ] || set -- "${1%/*}" - # If target is now empty, go to the root - [ -n "$1" ] || set -- / - - # Try to change into the determined directory - command cd -- "$@" + # Try to change into the determined directory, or root if empty + command cd -- "${1:-/}" } -- cgit v1.2.3