From 3d9c1d7852d8db7241ff4f68f6c0f4f9b5cb4d8c Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Mon, 5 May 2014 21:43:22 +0200 Subject: [PATCH 1/5] use sed for *PATH stripping --- nvm.sh | 30 +++++++++---------- ...ould unset the nvm environment variables." | 4 +-- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/nvm.sh b/nvm.sh index ec5c6e4..bc4aede 100644 --- a/nvm.sh +++ b/nvm.sh @@ -424,20 +424,20 @@ nvm() { ;; "deactivate" ) if [ `expr "$PATH" : ".*$NVM_DIR/.*/bin.*"` != 0 ] ; then - export PATH=${PATH%$NVM_DIR/*/bin*}${PATH#*$NVM_DIR/*/bin:} + export PATH=`echo $PATH | sed -E "s#$NVM_DIR/[^/]*/bin[^:]*(:)?##g"` hash -r echo "$NVM_DIR/*/bin removed from \$PATH" else echo "Could not find $NVM_DIR/*/bin in \$PATH" fi if [ `expr "$MANPATH" : ".*$NVM_DIR/.*/share/man.*"` != 0 ] ; then - export MANPATH=${MANPATH%$NVM_DIR/*/share/man*}${MANPATH#*$NVM_DIR/*/share/man:} + export MANPATH=`echo $MANPATH | sed -E "s#$NVM_DIR/[^/]*/share/man[^:]*(:)?##g"` echo "$NVM_DIR/*/share/man removed from \$MANPATH" else echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" fi if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ] ; then - export NODE_PATH=${NODE_PATH%$NVM_DIR/*/lib/node_modules*}${NODE_PATH#*$NVM_DIR/*/lib/node_modules:} + export NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*(:)?##g"` echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH" else echo "Could not find $NVM_DIR/*/lib/node_modules in \$NODE_PATH" @@ -468,24 +468,23 @@ nvm() { return 1 fi if [ `expr "$PATH" : ".*$NVM_DIR/.*/bin"` != 0 ]; then - PATH=${PATH%$NVM_DIR/*/bin*}$NVM_DIR/$VERSION/bin${PATH#*$NVM_DIR/*/bin} - else - PATH="$NVM_DIR/$VERSION/bin:$PATH" + # Strip other version from PATH + PATH=`echo $PATH | sed -E "s#$NVM_DIR/[^/]*/bin[^:]*(:)?##g"` fi + PATH="$NVM_DIR/$VERSION/bin:$PATH" if [ -z "$MANPATH" ]; then MANPATH=$(manpath) fi - MANPATH=${MANPATH#*$NVM_DIR/*/man:} if [ `expr "$MANPATH" : ".*$NVM_DIR/.*/share/man"` != 0 ]; then - MANPATH=${MANPATH%$NVM_DIR/*/share/man*}$NVM_DIR/$VERSION/share/man${MANPATH#*$NVM_DIR/*/share/man} - else - MANPATH="$NVM_DIR/$VERSION/share/man:$MANPATH" + # Strip other version from MANPATH + MANPATH=`echo $MANPATH | sed -E "s#$NVM_DIR/[^/]*/share/man[^:]*(:)?##g"` fi + MANPATH="$NVM_DIR/$VERSION/share/man:$MANPATH" if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ]; then - NODE_PATH=${NODE_PATH%$NVM_DIR/*/lib/node_modules*}$NVM_DIR/$VERSION/lib/node_modules${NODE_PATH#*$NVM_DIR/*/lib/node_modules} - else - NODE_PATH="$NVM_DIR/$VERSION/lib/node_modules:$NODE_PATH" + # Strip other version from NODE_PATH + NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*(:)?##g"` fi + NODE_PATH="$NVM_DIR/$VERSION/lib/node_modules:$NODE_PATH" export PATH hash -r export MANPATH @@ -531,10 +530,9 @@ nvm() { return; fi if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ]; then - RUN_NODE_PATH=${NODE_PATH%$NVM_DIR/*/lib/node_modules*}$NVM_DIR/$VERSION/lib/node_modules${NODE_PATH#*$NVM_DIR/*/lib/node_modules} - else - RUN_NODE_PATH="$NVM_DIR/$VERSION/lib/node_modules:$NODE_PATH" + RUN_NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*(:)?##g"` fi + RUN_NODE_PATH="$NVM_DIR/$VERSION/lib/node_modules:$NODE_PATH" echo "Running node $VERSION" NODE_PATH=$RUN_NODE_PATH $NVM_DIR/$VERSION/bin/node "$@" ;; diff --git "a/test/fast/Running \"nvm deactivate\" should unset the nvm environment variables." "b/test/fast/Running \"nvm deactivate\" should unset the nvm environment variables." index 2526bdb..2149273 100755 --- "a/test/fast/Running \"nvm deactivate\" should unset the nvm environment variables." +++ "b/test/fast/Running \"nvm deactivate\" should unset the nvm environment variables." @@ -8,7 +8,7 @@ die () { echo $@ ; exit 1; } . ../../nvm.sh nvm use v0.2.3 && -[ `expr $PATH : ".*v0.2.3/.*/bin"` != 0 ] || die "Failed to activate v0.2.3" +[ `expr $PATH : ".*v0.2.3/.*/bin"` != 0 ] && [ `expr $NODE_PATH : ".*v0.2.3/.*/lib/node_modules"` != 0 ] || die "Failed to activate v0.2.3" nvm deactivate && -[ `expr $PATH : ".*v0.2.3/.*/bin"` = 0 ] || die "Failed to deactivate v0.2.3" +[ `expr $PATH : ".*v0.2.3/.*/bin"` = 0 ] && [ `expr $NODE_PATH : ".*v0.2.3/.*/lib/node_modules"` = 0 ] || die "Failed to deactivate v0.2.3" From 6668dc5c472b698a3fdb8c587f7a3db3324e6bba Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Mon, 5 May 2014 21:50:59 +0200 Subject: [PATCH 2/5] remove parentheses --- nvm.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/nvm.sh b/nvm.sh index bc4aede..0310078 100644 --- a/nvm.sh +++ b/nvm.sh @@ -424,20 +424,20 @@ nvm() { ;; "deactivate" ) if [ `expr "$PATH" : ".*$NVM_DIR/.*/bin.*"` != 0 ] ; then - export PATH=`echo $PATH | sed -E "s#$NVM_DIR/[^/]*/bin[^:]*(:)?##g"` + export PATH=`echo $PATH | sed -E "s#$NVM_DIR/[^/]*/bin[^:]*:?##g"` hash -r echo "$NVM_DIR/*/bin removed from \$PATH" else echo "Could not find $NVM_DIR/*/bin in \$PATH" fi if [ `expr "$MANPATH" : ".*$NVM_DIR/.*/share/man.*"` != 0 ] ; then - export MANPATH=`echo $MANPATH | sed -E "s#$NVM_DIR/[^/]*/share/man[^:]*(:)?##g"` + export MANPATH=`echo $MANPATH | sed -E "s#$NVM_DIR/[^/]*/share/man[^:]*:?##g"` echo "$NVM_DIR/*/share/man removed from \$MANPATH" else echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" fi if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ] ; then - export NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*(:)?##g"` + export NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*:?##g"` echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH" else echo "Could not find $NVM_DIR/*/lib/node_modules in \$NODE_PATH" @@ -469,7 +469,7 @@ nvm() { fi if [ `expr "$PATH" : ".*$NVM_DIR/.*/bin"` != 0 ]; then # Strip other version from PATH - PATH=`echo $PATH | sed -E "s#$NVM_DIR/[^/]*/bin[^:]*(:)?##g"` + PATH=`echo $PATH | sed -E "s#$NVM_DIR/[^/]*/bin[^:]*:?##g"` fi PATH="$NVM_DIR/$VERSION/bin:$PATH" if [ -z "$MANPATH" ]; then @@ -477,12 +477,12 @@ nvm() { fi if [ `expr "$MANPATH" : ".*$NVM_DIR/.*/share/man"` != 0 ]; then # Strip other version from MANPATH - MANPATH=`echo $MANPATH | sed -E "s#$NVM_DIR/[^/]*/share/man[^:]*(:)?##g"` + MANPATH=`echo $MANPATH | sed -E "s#$NVM_DIR/[^/]*/share/man[^:]*:?##g"` fi MANPATH="$NVM_DIR/$VERSION/share/man:$MANPATH" if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ]; then # Strip other version from NODE_PATH - NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*(:)?##g"` + NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*:?##g"` fi NODE_PATH="$NVM_DIR/$VERSION/lib/node_modules:$NODE_PATH" export PATH @@ -530,7 +530,7 @@ nvm() { return; fi if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ]; then - RUN_NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*(:)?##g"` + RUN_NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*:?##g"` fi RUN_NODE_PATH="$NVM_DIR/$VERSION/lib/node_modules:$NODE_PATH" echo "Running node $VERSION" From d6e457354f7d908ecaabc6f80349b494971df72a Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Mon, 5 May 2014 22:03:11 +0200 Subject: [PATCH 3/5] use nvm_strip_path utility method for path stripping --- nvm.sh | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/nvm.sh b/nvm.sh index 0310078..30eb9eb 100644 --- a/nvm.sh +++ b/nvm.sh @@ -97,6 +97,10 @@ nvm_format_version() { echo "$1" | sed -e 's/^\([0-9]\)/v\1/g' } +nvm_strip_path() { + echo $1 | sed -E "s#$NVM_DIR/[^/]*$2[^:]*:?##g" +} + nvm_binary_available() { # binaries started with node 0.8.6 local MINIMAL="0.8.6" @@ -424,20 +428,20 @@ nvm() { ;; "deactivate" ) if [ `expr "$PATH" : ".*$NVM_DIR/.*/bin.*"` != 0 ] ; then - export PATH=`echo $PATH | sed -E "s#$NVM_DIR/[^/]*/bin[^:]*:?##g"` + export PATH=`nvm_strip_path "$PATH" "/bin"` hash -r echo "$NVM_DIR/*/bin removed from \$PATH" else echo "Could not find $NVM_DIR/*/bin in \$PATH" fi if [ `expr "$MANPATH" : ".*$NVM_DIR/.*/share/man.*"` != 0 ] ; then - export MANPATH=`echo $MANPATH | sed -E "s#$NVM_DIR/[^/]*/share/man[^:]*:?##g"` + export MANPATH=`nvm_strip_path "$MANPATH" "/share/man"` echo "$NVM_DIR/*/share/man removed from \$MANPATH" else echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" fi if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ] ; then - export NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*:?##g"` + export NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"` echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH" else echo "Could not find $NVM_DIR/*/lib/node_modules in \$NODE_PATH" @@ -469,7 +473,7 @@ nvm() { fi if [ `expr "$PATH" : ".*$NVM_DIR/.*/bin"` != 0 ]; then # Strip other version from PATH - PATH=`echo $PATH | sed -E "s#$NVM_DIR/[^/]*/bin[^:]*:?##g"` + PATH=`nvm_strip_path "$PATH" "/bin"` fi PATH="$NVM_DIR/$VERSION/bin:$PATH" if [ -z "$MANPATH" ]; then @@ -477,12 +481,12 @@ nvm() { fi if [ `expr "$MANPATH" : ".*$NVM_DIR/.*/share/man"` != 0 ]; then # Strip other version from MANPATH - MANPATH=`echo $MANPATH | sed -E "s#$NVM_DIR/[^/]*/share/man[^:]*:?##g"` + MANPATH=`nvm_strip_path "$MANPATH" "/share/man"` fi MANPATH="$NVM_DIR/$VERSION/share/man:$MANPATH" if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ]; then # Strip other version from NODE_PATH - NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*:?##g"` + NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"` fi NODE_PATH="$NVM_DIR/$VERSION/lib/node_modules:$NODE_PATH" export PATH @@ -530,7 +534,7 @@ nvm() { return; fi if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ]; then - RUN_NODE_PATH=`echo $NODE_PATH | sed -E "s#$NVM_DIR/[^/]*/lib/node_modules[^:]*:?##g"` + RUN_NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"` fi RUN_NODE_PATH="$NVM_DIR/$VERSION/lib/node_modules:$NODE_PATH" echo "Running node $VERSION" From 0d81a219ae77d029f6c5e463cd8c9426651e0969 Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Mon, 5 May 2014 22:05:02 +0200 Subject: [PATCH 4/5] add quotes --- nvm.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nvm.sh b/nvm.sh index 30eb9eb..825d68b 100644 --- a/nvm.sh +++ b/nvm.sh @@ -98,7 +98,7 @@ nvm_format_version() { } nvm_strip_path() { - echo $1 | sed -E "s#$NVM_DIR/[^/]*$2[^:]*:?##g" + echo "$1" | sed -E "s#$NVM_DIR/[^/]*$2[^:]*:?##g" } nvm_binary_available() { From 652a9ef9b52f29888fdfdb3d581c8661a3615941 Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Tue, 6 May 2014 00:00:25 +0200 Subject: [PATCH 5/5] always apply path stripping --- nvm.sh | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/nvm.sh b/nvm.sh index 825d68b..5837602 100644 --- a/nvm.sh +++ b/nvm.sh @@ -471,23 +471,20 @@ nvm() { echo "$VERSION version is not installed yet" return 1 fi - if [ `expr "$PATH" : ".*$NVM_DIR/.*/bin"` != 0 ]; then - # Strip other version from PATH - PATH=`nvm_strip_path "$PATH" "/bin"` - fi + # Strip other version from PATH + PATH=`nvm_strip_path "$PATH" "/bin"` + # Prepend current version PATH="$NVM_DIR/$VERSION/bin:$PATH" if [ -z "$MANPATH" ]; then MANPATH=$(manpath) fi - if [ `expr "$MANPATH" : ".*$NVM_DIR/.*/share/man"` != 0 ]; then - # Strip other version from MANPATH - MANPATH=`nvm_strip_path "$MANPATH" "/share/man"` - fi + # Strip other version from MANPATH + MANPATH=`nvm_strip_path "$MANPATH" "/share/man"` + # Prepend current version MANPATH="$NVM_DIR/$VERSION/share/man:$MANPATH" - if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ]; then - # Strip other version from NODE_PATH - NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"` - fi + # Strip other version from NODE_PATH + NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"` + # Prepend current version NODE_PATH="$NVM_DIR/$VERSION/lib/node_modules:$NODE_PATH" export PATH hash -r @@ -533,9 +530,7 @@ nvm() { echo "$VERSION version is not installed yet" return; fi - if [ `expr "$NODE_PATH" : ".*$NVM_DIR/.*/lib/node_modules.*"` != 0 ]; then - RUN_NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"` - fi + RUN_NODE_PATH=`nvm_strip_path "$NODE_PATH" "/lib/node_modules"` RUN_NODE_PATH="$NVM_DIR/$VERSION/lib/node_modules:$NODE_PATH" echo "Running node $VERSION" NODE_PATH=$RUN_NODE_PATH $NVM_DIR/$VERSION/bin/node "$@"