diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2017-06-02 22:09:38 +1200 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2017-06-02 22:09:38 +1200 |
commit | e1e02dae1d6cfe6c34d1f0641349fab6eadca19c (patch) | |
tree | f11de1d64997ef90579fef04018e66350e3dfb73 /sh/shrc.d/gt.sh | |
parent | Merge branch 'master' into port/bsd/freebsd (diff) | |
parent | Remove lies from mi5 (diff) | |
download | dotfiles-e1e02dae1d6cfe6c34d1f0641349fab6eadca19c.tar.gz dotfiles-e1e02dae1d6cfe6c34d1f0641349fab6eadca19c.zip |
Merge branch 'master' into port/bsd/freebsd
Diffstat (limited to 'sh/shrc.d/gt.sh')
-rw-r--r-- | sh/shrc.d/gt.sh | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/sh/shrc.d/gt.sh b/sh/shrc.d/gt.sh index d18a4ab8..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 'gd(): 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:-/}" } |