From 3d9c1d7852d8db7241ff4f68f6c0f4f9b5cb4d8c Mon Sep 17 00:00:00 2001
From: Koen Punt <koen@koenpunt.nl>
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 <koen@koenpunt.nl>
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 <koen@koenpunt.nl>
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 <koen@koenpunt.nl>
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 <koen@koenpunt.nl>
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 "$@"