From 14df1d68bfe97e7fa96c84d51495fcdb65917346 Mon Sep 17 00:00:00 2001 From: Maxim Ivanov Date: Wed, 4 May 2016 22:04:52 +0100 Subject: [PATCH 1/3] Shorter version --- upto.sh | 32 +++----------------------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/upto.sh b/upto.sh index 41894dc..20506c9 100755 --- a/upto.sh +++ b/upto.sh @@ -1,33 +1,7 @@ #!/bin/bash -function upto() { - local EXPRESSION="$1" - if [ -z "$EXPRESSION" ]; then - echo "A folder expression must be provided." >&2 - return 1 - fi - if [ "$EXPRESSION" = "/" ]; then - cd "/" - return 0 - fi - local CURRENT_FOLDER="$(pwd)" - local MATCHED_DIR="" - local MATCHING=true - - while [ "$MATCHING" = true ]; do - if [[ "$CURRENT_FOLDER" =~ "$EXPRESSION" ]]; then - MATCHED_DIR="$CURRENT_FOLDER" - CURRENT_FOLDER=$(dirname "$CURRENT_FOLDER") - else - MATCHING=false - fi - done - if [ -n "$MATCHED_DIR" ]; then - cd "$MATCHED_DIR" - return 0 - else - echo "No Match." >&2 - return 1 - fi +function upto() { + local D=${PWD%${PWD#*/*([^/])$1*/}} + [[ -z "$D" ]] || cd "$D" } # complete upto From e7ce3293a6346bc8b2d0f9f920cb24022b9a0bbd Mon Sep 17 00:00:00 2001 From: Maxim Ivanov Date: Wed, 4 May 2016 22:24:32 +0100 Subject: [PATCH 2/3] remove redundant subshell --- upto.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upto.sh b/upto.sh index 20506c9..8546bec 100755 --- a/upto.sh +++ b/upto.sh @@ -10,6 +10,6 @@ _upto () { local cur prev words cword _init_completion || return - COMPREPLY+=( $( compgen -W "$( echo ${PWD//\// } )" -- $cur ) ) + COMPREPLY+=( $( compgen -W "${PWD//\// }" -- $cur ) ) } complete -F _upto upto From 2fa47abbf368396dcdb18db70dc34a16a0f2d473 Mon Sep 17 00:00:00 2001 From: Maxim Ivanov Date: Wed, 4 May 2016 22:58:24 +0100 Subject: [PATCH 3/3] Handle spaces in dir names --- upto.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upto.sh b/upto.sh index 8546bec..c6acc40 100755 --- a/upto.sh +++ b/upto.sh @@ -1,6 +1,6 @@ #!/bin/bash function upto() { - local D=${PWD%${PWD#*/*([^/])$1*/}} + local D="${PWD%"${PWD#*/*([^/])$1*/}"}" [[ -z "$D" ]] || cd "$D" }