mirror of
				https://github.com/nvm-sh/nvm.git
				synced 2025-10-31 10:15:53 +08:00 
			
		
		
		
	Reduce usage of `cd' to avoid issues with shell aliases
Since we run in interactive context the builtin `cd' may have been aliased to
print some additional info when invoked, thus it's safer for us to avoid
parsing the output from subshells which calls it.
For instance in .bash_profile I have the following function to redefine
`cd' such that it will list the destination directory contents:
cd () { builtin cd "$@" && ls -F --color=auto }
			
			
This commit is contained in:
		
							
								
								
									
										66
									
								
								nvm.sh
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								nvm.sh
									
									
									
									
									
								
							| @@ -7,7 +7,7 @@ | ||||
|  | ||||
| # Auto detect the NVM_DIR | ||||
| if [ ! -d "$NVM_DIR" ]; then | ||||
|     export NVM_DIR=$(cd $(dirname ${BASH_SOURCE[0]:-$0}) && pwd) | ||||
|     export NVM_DIR=$(cd $(dirname ${BASH_SOURCE[0]:-$0}) > /dev/null && pwd) | ||||
| fi | ||||
|  | ||||
| # Make zsh glob matching behave same as bash | ||||
| @@ -16,6 +16,16 @@ if [ ! -z "$(which unsetopt 2>/dev/null)" ]; then | ||||
|     unsetopt nomatch 2>/dev/null | ||||
| fi | ||||
|  | ||||
| function nvm_set_nullglob { | ||||
|   if type setopt > /dev/null 2>&1; then | ||||
|       # Zsh | ||||
|       setopt NULL_GLOB | ||||
|   else | ||||
|       # Bash | ||||
|       shopt -s nullglob | ||||
|   fi | ||||
| } | ||||
|  | ||||
| # Obtain nvm version from rc file | ||||
| function rc_nvm_version { | ||||
|   if [ -e .nvmrc ]; then | ||||
| @@ -69,7 +79,7 @@ nvm_ls() | ||||
|     if [[ "$PATTERN" == v?*.?*.?* ]]; then | ||||
|         VERSIONS="$PATTERN" | ||||
|     else | ||||
|         VERSIONS=`(cd $NVM_DIR; \ls -d v${PATTERN}* 2>/dev/null) | sort -t. -k 1.2,1n -k 2,2n -k 3,3n` | ||||
|         VERSIONS=`nvm_set_nullglob; basename -a $NVM_DIR/v${PATTERN}* 2>/dev/null | sort -t. -k 1.2,1n -k 2,2n -k 3,3n` | ||||
|     fi | ||||
|     if [ ! "$VERSIONS" ]; then | ||||
|         echo "N/A" | ||||
| @@ -244,21 +254,22 @@ nvm() | ||||
|             t="$VERSION-$os-$arch" | ||||
|             url="http://nodejs.org/dist/$VERSION/node-${t}.tar.gz" | ||||
|             sum=`curl -s http://nodejs.org/dist/$VERSION/SHASUMS.txt | grep node-${t}.tar.gz | awk '{print $1}'` | ||||
|             local tmpdir="$NVM_DIR/bin/node-${t}" | ||||
|             local tmptarball="$tmpdir/node-${t}.tar.gz" | ||||
|             if ( | ||||
|               mkdir -p "$NVM_DIR/bin/node-${t}" && \ | ||||
|               cd "$NVM_DIR/bin" && \ | ||||
|               curl -C - --progress-bar $url -o "node-${t}.tar.gz" && \ | ||||
|               nvm_checksum `${shasum} node-${t}.tar.gz | awk '{print $1}'` $sum && \ | ||||
|               tar -xzf "node-${t}.tar.gz" -C "node-${t}" --strip-components 1 && \ | ||||
|               mv "node-${t}" "../$VERSION" && \ | ||||
|               rm -f "node-${t}.tar.gz" | ||||
|               mkdir -p "$tmpdir" && \ | ||||
|               curl -C - --progress-bar $url -o "$tmptarball" && \ | ||||
|               nvm_checksum `${shasum} "$tmptarball" | awk '{print $1}'` $sum && \ | ||||
|               tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \ | ||||
|               mv "$tmpdir" "$NVM_DIR/$VERSION" && \ | ||||
|               rm -f "$tmptarball" | ||||
|               ) | ||||
|             then | ||||
|               nvm use $VERSION | ||||
|               return; | ||||
|             else | ||||
|               echo "Binary download failed, trying source." >&2 | ||||
|               cd "$NVM_DIR/bin" && rm -rf "node-${t}.tar.gz" "node-${t}" | ||||
|               rm -rf "$tmptarball" "$tmpdir" | ||||
|             fi | ||||
|           fi | ||||
|         fi | ||||
| @@ -272,6 +283,8 @@ nvm() | ||||
|       if [ "$os" = "freebsd" ]; then | ||||
| 	make='gmake' | ||||
|       fi | ||||
|       local tmpdir="$NVM_DIR/src" | ||||
|       local tmptarball="$tmpdir/node-$VERSION.tar.gz" | ||||
|       if [ "`curl -Is "http://nodejs.org/dist/$VERSION/node-$VERSION.tar.gz" | grep '200 OK'`" != '' ]; then | ||||
|         tarball="http://nodejs.org/dist/$VERSION/node-$VERSION.tar.gz" | ||||
|         sum=`curl -s http://nodejs.org/dist/$VERSION/SHASUMS.txt | grep node-$VERSION.tar.gz | awk '{print $1}'` | ||||
| @@ -280,12 +293,11 @@ nvm() | ||||
|       fi | ||||
|       if ( | ||||
|         [ ! -z $tarball ] && \ | ||||
|         mkdir -p "$NVM_DIR/src" && \ | ||||
|         cd "$NVM_DIR/src" && \ | ||||
|         curl --progress-bar $tarball -o "node-$VERSION.tar.gz" && \ | ||||
|         if [ "$sum" = "" ]; then : ; else nvm_checksum `${shasum} node-$VERSION.tar.gz | awk '{print $1}'` $sum; fi && \ | ||||
|         tar -xzf "node-$VERSION.tar.gz" && \ | ||||
|         cd "node-$VERSION" && \ | ||||
|         mkdir -p "$tmpdir" && \ | ||||
|         curl --progress-bar $tarball -o "$tmptarball" && \ | ||||
|         if [ "$sum" = "" ]; then : ; else nvm_checksum `${shasum} "$tmptarball" | awk '{print $1}'` $sum; fi && \ | ||||
|         tar -xzf "$tmptarball" -C "$tmpdir" && \ | ||||
|         cd "$tmpdir/node-$VERSION" && \ | ||||
|         ./configure --prefix="$NVM_DIR/$VERSION" $ADDITIONAL_PARAMETERS && \ | ||||
|         $make && \ | ||||
|         rm -f "$NVM_DIR/$VERSION" 2>/dev/null && \ | ||||
| @@ -327,15 +339,11 @@ nvm() | ||||
|       t="$VERSION-$os-$arch" | ||||
|  | ||||
|       # Delete all files related to target version. | ||||
|       (mkdir -p "$NVM_DIR/src" && \ | ||||
|           cd "$NVM_DIR/src" && \ | ||||
|           rm -rf "node-$VERSION" 2>/dev/null && \ | ||||
|           rm -f "node-$VERSION.tar.gz" 2>/dev/null && \ | ||||
|           mkdir -p "$NVM_DIR/bin" && \ | ||||
|           cd "$NVM_DIR/bin" && \ | ||||
|           rm -rf "node-${t}" 2>/dev/null && \ | ||||
|           rm -f "node-${t}.tar.gz" 2>/dev/null && \ | ||||
|           rm -rf "$NVM_DIR/$VERSION" 2>/dev/null) | ||||
|       rm -rf "$NVM_DIR/src/node-$VERSION" \ | ||||
|              "$NVM_DIR/src/node-$VERSION.tar.gz" \ | ||||
|              "$NVM_DIR/bin/node-${t}" \ | ||||
|              "$NVM_DIR/bin/node-${t}.tar.gz" \ | ||||
|              "$NVM_DIR/$VERSION" 2>/dev/null | ||||
|       echo "Uninstalled node $VERSION" | ||||
|  | ||||
|       # Rm any aliases that point to uninstalled version. | ||||
| @@ -430,15 +438,15 @@ nvm() | ||||
|     "alias" ) | ||||
|       mkdir -p $NVM_DIR/alias | ||||
|       if [ $# -le 2 ]; then | ||||
|         (cd $NVM_DIR/alias && for ALIAS in `\ls $2* 2>/dev/null`; do | ||||
|         for ALIAS in $(nvm_set_nullglob; echo $NVM_DIR/alias/$2* ); do | ||||
|             DEST=`cat $ALIAS` | ||||
|             VERSION=`nvm_version $DEST` | ||||
|             if [ "$DEST" = "$VERSION" ]; then | ||||
|                 echo "$ALIAS -> $DEST" | ||||
|                 echo "$(basename $ALIAS) -> $DEST" | ||||
|             else | ||||
|                 echo "$ALIAS -> $DEST (-> $VERSION)" | ||||
|                 echo "$(basename $ALIAS) -> $DEST (-> $VERSION)" | ||||
|             fi | ||||
|         done) | ||||
|         done | ||||
|         return | ||||
|       fi | ||||
|       if [ ! "$3" ]; then | ||||
|   | ||||
		Reference in New Issue
	
	Block a user