mirror of
				https://github.com/nvm-sh/nvm.git
				synced 2025-11-01 02:35:51 +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 | # Auto detect the NVM_DIR | ||||||
| if [ ! -d "$NVM_DIR" ]; then | 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 | fi | ||||||
|  |  | ||||||
| # Make zsh glob matching behave same as bash | # 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 |     unsetopt nomatch 2>/dev/null | ||||||
| fi | 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 | # Obtain nvm version from rc file | ||||||
| function rc_nvm_version { | function rc_nvm_version { | ||||||
|   if [ -e .nvmrc ]; then |   if [ -e .nvmrc ]; then | ||||||
| @@ -69,7 +79,7 @@ nvm_ls() | |||||||
|     if [[ "$PATTERN" == v?*.?*.?* ]]; then |     if [[ "$PATTERN" == v?*.?*.?* ]]; then | ||||||
|         VERSIONS="$PATTERN" |         VERSIONS="$PATTERN" | ||||||
|     else |     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 |     fi | ||||||
|     if [ ! "$VERSIONS" ]; then |     if [ ! "$VERSIONS" ]; then | ||||||
|         echo "N/A" |         echo "N/A" | ||||||
| @@ -244,21 +254,22 @@ nvm() | |||||||
|             t="$VERSION-$os-$arch" |             t="$VERSION-$os-$arch" | ||||||
|             url="http://nodejs.org/dist/$VERSION/node-${t}.tar.gz" |             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}'` |             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 ( |             if ( | ||||||
|               mkdir -p "$NVM_DIR/bin/node-${t}" && \ |               mkdir -p "$tmpdir" && \ | ||||||
|               cd "$NVM_DIR/bin" && \ |               curl -C - --progress-bar $url -o "$tmptarball" && \ | ||||||
|               curl -C - --progress-bar $url -o "node-${t}.tar.gz" && \ |               nvm_checksum `${shasum} "$tmptarball" | awk '{print $1}'` $sum && \ | ||||||
|               nvm_checksum `${shasum} node-${t}.tar.gz | awk '{print $1}'` $sum && \ |               tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \ | ||||||
|               tar -xzf "node-${t}.tar.gz" -C "node-${t}" --strip-components 1 && \ |               mv "$tmpdir" "$NVM_DIR/$VERSION" && \ | ||||||
|               mv "node-${t}" "../$VERSION" && \ |               rm -f "$tmptarball" | ||||||
|               rm -f "node-${t}.tar.gz" |  | ||||||
|               ) |               ) | ||||||
|             then |             then | ||||||
|               nvm use $VERSION |               nvm use $VERSION | ||||||
|               return; |               return; | ||||||
|             else |             else | ||||||
|               echo "Binary download failed, trying source." >&2 |               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 |           fi | ||||||
|         fi |         fi | ||||||
| @@ -272,6 +283,8 @@ nvm() | |||||||
|       if [ "$os" = "freebsd" ]; then |       if [ "$os" = "freebsd" ]; then | ||||||
| 	make='gmake' | 	make='gmake' | ||||||
|       fi |       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 |       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" |         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}'` |         sum=`curl -s http://nodejs.org/dist/$VERSION/SHASUMS.txt | grep node-$VERSION.tar.gz | awk '{print $1}'` | ||||||
| @@ -280,12 +293,11 @@ nvm() | |||||||
|       fi |       fi | ||||||
|       if ( |       if ( | ||||||
|         [ ! -z $tarball ] && \ |         [ ! -z $tarball ] && \ | ||||||
|         mkdir -p "$NVM_DIR/src" && \ |         mkdir -p "$tmpdir" && \ | ||||||
|         cd "$NVM_DIR/src" && \ |         curl --progress-bar $tarball -o "$tmptarball" && \ | ||||||
|         curl --progress-bar $tarball -o "node-$VERSION.tar.gz" && \ |         if [ "$sum" = "" ]; then : ; else nvm_checksum `${shasum} "$tmptarball" | awk '{print $1}'` $sum; fi && \ | ||||||
|         if [ "$sum" = "" ]; then : ; else nvm_checksum `${shasum} node-$VERSION.tar.gz | awk '{print $1}'` $sum; fi && \ |         tar -xzf "$tmptarball" -C "$tmpdir" && \ | ||||||
|         tar -xzf "node-$VERSION.tar.gz" && \ |         cd "$tmpdir/node-$VERSION" && \ | ||||||
|         cd "node-$VERSION" && \ |  | ||||||
|         ./configure --prefix="$NVM_DIR/$VERSION" $ADDITIONAL_PARAMETERS && \ |         ./configure --prefix="$NVM_DIR/$VERSION" $ADDITIONAL_PARAMETERS && \ | ||||||
|         $make && \ |         $make && \ | ||||||
|         rm -f "$NVM_DIR/$VERSION" 2>/dev/null && \ |         rm -f "$NVM_DIR/$VERSION" 2>/dev/null && \ | ||||||
| @@ -327,15 +339,11 @@ nvm() | |||||||
|       t="$VERSION-$os-$arch" |       t="$VERSION-$os-$arch" | ||||||
|  |  | ||||||
|       # Delete all files related to target version. |       # Delete all files related to target version. | ||||||
|       (mkdir -p "$NVM_DIR/src" && \ |       rm -rf "$NVM_DIR/src/node-$VERSION" \ | ||||||
|           cd "$NVM_DIR/src" && \ |              "$NVM_DIR/src/node-$VERSION.tar.gz" \ | ||||||
|           rm -rf "node-$VERSION" 2>/dev/null && \ |              "$NVM_DIR/bin/node-${t}" \ | ||||||
|           rm -f "node-$VERSION.tar.gz" 2>/dev/null && \ |              "$NVM_DIR/bin/node-${t}.tar.gz" \ | ||||||
|           mkdir -p "$NVM_DIR/bin" && \ |              "$NVM_DIR/$VERSION" 2>/dev/null | ||||||
|           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) |  | ||||||
|       echo "Uninstalled node $VERSION" |       echo "Uninstalled node $VERSION" | ||||||
|  |  | ||||||
|       # Rm any aliases that point to uninstalled version. |       # Rm any aliases that point to uninstalled version. | ||||||
| @@ -430,15 +438,15 @@ nvm() | |||||||
|     "alias" ) |     "alias" ) | ||||||
|       mkdir -p $NVM_DIR/alias |       mkdir -p $NVM_DIR/alias | ||||||
|       if [ $# -le 2 ]; then |       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` |             DEST=`cat $ALIAS` | ||||||
|             VERSION=`nvm_version $DEST` |             VERSION=`nvm_version $DEST` | ||||||
|             if [ "$DEST" = "$VERSION" ]; then |             if [ "$DEST" = "$VERSION" ]; then | ||||||
|                 echo "$ALIAS -> $DEST" |                 echo "$(basename $ALIAS) -> $DEST" | ||||||
|             else |             else | ||||||
|                 echo "$ALIAS -> $DEST (-> $VERSION)" |                 echo "$(basename $ALIAS) -> $DEST (-> $VERSION)" | ||||||
|             fi |             fi | ||||||
|         done) |         done | ||||||
|         return |         return | ||||||
|       fi |       fi | ||||||
|       if [ ! "$3" ]; then |       if [ ! "$3" ]; then | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user