aboutsummaryrefslogtreecommitdiff
path: root/sh/shrc.d/gt.sh
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-06-02 22:09:38 +1200
committerTom Ryder <tom@sanctum.geek.nz>2017-06-02 22:09:38 +1200
commite1e02dae1d6cfe6c34d1f0641349fab6eadca19c (patch)
treef11de1d64997ef90579fef04018e66350e3dfb73 /sh/shrc.d/gt.sh
parentMerge branch 'master' into port/bsd/freebsd (diff)
parentRemove lies from mi5 (diff)
downloaddotfiles-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.sh28
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:-/}"
}