[Fix] handle unbound shell variables.

Fixes #868.
Jordan Harband 2016-01-17 15:12:02 -08:00
parent 1e1a005a53
commit 00a8b36b78
1 changed files with 38 additions and 27 deletions

65
nvm.sh
View File

@ -68,13 +68,16 @@ nvm_print_npm_version() {
# Make zsh glob matching behave same as bash # Make zsh glob matching behave same as bash
# This fixes the "zsh: no matches found" errors # This fixes the "zsh: no matches found" errors
if [ -z "${NVM_CD_FLAGS-}"]; then
export NVM_CD_FLAGS=''
fi
if nvm_has "unsetopt"; then if nvm_has "unsetopt"; then
unsetopt nomatch 2>/dev/null unsetopt nomatch 2>/dev/null
NVM_CD_FLAGS="-q" NVM_CD_FLAGS="-q"
fi fi
# Auto detect the NVM_DIR when not set # Auto detect the NVM_DIR when not set
if [ -z "$NVM_DIR" ]; then if [ -z "${NVM_DIR-}" ]; then
if [ -n "$BASH_SOURCE" ]; then if [ -n "$BASH_SOURCE" ]; then
NVM_SCRIPT_SOURCE="${BASH_SOURCE[0]}" NVM_SCRIPT_SOURCE="${BASH_SOURCE[0]}"
fi fi
@ -85,7 +88,7 @@ unset NVM_SCRIPT_SOURCE 2> /dev/null
# Setup mirror location if not already set # Setup mirror location if not already set
if [ -z "$NVM_NODEJS_ORG_MIRROR" ]; then if [ -z "${NVM_NODEJS_ORG_MIRROR-}" ]; then
export NVM_NODEJS_ORG_MIRROR="https://nodejs.org/dist" export NVM_NODEJS_ORG_MIRROR="https://nodejs.org/dist"
fi fi
@ -529,7 +532,7 @@ nvm_strip_iojs_prefix() {
nvm_ls() { nvm_ls() {
local PATTERN local PATTERN
PATTERN="$1" PATTERN="${1-}"
local VERSIONS local VERSIONS
VERSIONS='' VERSIONS=''
if [ "$PATTERN" = 'current' ]; then if [ "$PATTERN" = 'current' ]; then
@ -659,7 +662,7 @@ nvm_ls() {
fi fi
fi fi
if [ "$NVM_ADD_SYSTEM" = true ]; then if [ "${NVM_ADD_SYSTEM-}" = true ]; then
if [ -z "$PATTERN" ] || [ "_$PATTERN" = "_v" ]; then if [ -z "$PATTERN" ] || [ "_$PATTERN" = "_v" ]; then
VERSIONS="$VERSIONS$(command printf '\n%s' 'system')" VERSIONS="$VERSIONS$(command printf '\n%s' 'system')"
elif [ "$PATTERN" = 'system' ]; then elif [ "$PATTERN" = 'system' ]; then
@ -700,6 +703,7 @@ nvm_ls_remote_index_tab() {
local TYPE local TYPE
TYPE="$1" TYPE="$1"
local PREFIX local PREFIX
PREFIX=''
case "$TYPE-$2" in case "$TYPE-$2" in
iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;; iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;;
node-std) PREFIX='' ;; node-std) PREFIX='' ;;
@ -835,7 +839,7 @@ nvm_print_implicit_alias() {
local NVM_ADD_PREFIX_COMMAND local NVM_ADD_PREFIX_COMMAND
local LAST_TWO local LAST_TWO
case "$NVM_IMPLICIT" in case "$NVM_IMPLICIT" in
"$NVM_IOJS_PREFIX" | "$NVM_IOJS_RC_PREFIX") "$NVM_IOJS_PREFIX")
NVM_COMMAND="nvm_ls_remote_iojs" NVM_COMMAND="nvm_ls_remote_iojs"
NVM_ADD_PREFIX_COMMAND="nvm_add_iojs_prefix" NVM_ADD_PREFIX_COMMAND="nvm_add_iojs_prefix"
if [ "_$1" = "_local" ]; then if [ "_$1" = "_local" ]; then
@ -1146,7 +1150,7 @@ nvm_install_node_binary() {
local REINSTALL_PACKAGES_FROM local REINSTALL_PACKAGES_FROM
REINSTALL_PACKAGES_FROM="$2" REINSTALL_PACKAGES_FROM="$2"
if nvm_is_iojs_version "$PREFIXED_VERSION"; then if nvm_is_iojs_version "$VERSION"; then
echo 'nvm_install_node_binary does not allow an iojs-prefixed version.' >&2 echo 'nvm_install_node_binary does not allow an iojs-prefixed version.' >&2
return 10 return 10
fi fi
@ -1201,11 +1205,11 @@ nvm_install_node_binary() {
} }
nvm_get_make_jobs() { nvm_get_make_jobs() {
if nvm_is_natural_num "$1"; then if nvm_is_natural_num "${1-}"; then
NVM_MAKE_JOBS="$1" NVM_MAKE_JOBS="$1"
echo "number of \`make\` jobs: $NVM_MAKE_JOBS" echo "number of \`make\` jobs: $NVM_MAKE_JOBS"
return return
elif [ -n "$1" ]; then elif [ -n "${1-}" ]; then
unset NVM_MAKE_JOBS unset NVM_MAKE_JOBS
echo >&2 "$1 is invalid for number of \`make\` jobs, must be a natural number" echo >&2 "$1 is invalid for number of \`make\` jobs, must be a natural number"
fi fi
@ -1290,9 +1294,9 @@ nvm_install_node_source() {
command tar -xzf "$tmptarball" -C "$tmpdir" && \ command tar -xzf "$tmptarball" -C "$tmpdir" && \
cd "$tmpdir/node-$VERSION" && \ cd "$tmpdir/node-$VERSION" && \
./configure --prefix="$VERSION_PATH" $ADDITIONAL_PARAMETERS && \ ./configure --prefix="$VERSION_PATH" $ADDITIONAL_PARAMETERS && \
$make -j $NVM_MAKE_JOBS $MAKE_CXX && \ $make -j $NVM_MAKE_JOBS ${MAKE_CXX-} && \
command rm -f "$VERSION_PATH" 2>/dev/null && \ command rm -f "$VERSION_PATH" 2>/dev/null && \
$make -j $NVM_MAKE_JOBS $MAKE_CXX install $make -j $NVM_MAKE_JOBS ${MAKE_CXX-} install
) )
then then
if ! nvm_has "npm" ; then if ! nvm_has "npm" ; then
@ -1371,14 +1375,14 @@ nvm_die_on_prefix() {
return 2 return 2
fi fi
if [ -n "$PREFIX" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$PREFIX" >/dev/null 2>&1); then if [ -n "${PREFIX-}" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$PREFIX" >/dev/null 2>&1); then
nvm deactivate >/dev/null 2>&1 nvm deactivate >/dev/null 2>&1
echo >&2 "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"$PREFIX\"" echo >&2 "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"$PREFIX\""
echo >&2 "Run \`unset PREFIX\` to unset it." echo >&2 "Run \`unset PREFIX\` to unset it."
return 3 return 3
fi fi
if [ -n "$NPM_CONFIG_PREFIX" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$NPM_CONFIG_PREFIX" >/dev/null 2>&1); then if [ -n "${NPM_CONFIG_PREFIX-}" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$NPM_CONFIG_PREFIX" >/dev/null 2>&1); then
nvm deactivate >/dev/null 2>&1 nvm deactivate >/dev/null 2>&1
echo >&2 "nvm is not compatible with the \"NPM_CONFIG_PREFIX\" environment variable: currently set to \"$NPM_CONFIG_PREFIX\"" echo >&2 "nvm is not compatible with the \"NPM_CONFIG_PREFIX\" environment variable: currently set to \"$NPM_CONFIG_PREFIX\""
echo >&2 "Run \`unset NPM_CONFIG_PREFIX\` to unset it." echo >&2 "Run \`unset NPM_CONFIG_PREFIX\` to unset it."
@ -1702,6 +1706,9 @@ nvm() {
fi fi
fi fi
if [ "$NVM_INSTALL_SUCCESS" != true ]; then if [ "$NVM_INSTALL_SUCCESS" != true ]; then
if [ -z "${NVM_MAKE_JOBS-}" ]; then
nvm_get_make_jobs
fi
if [ "$NVM_IOJS" != true ] && [ "$NVM_NODE_MERGED" != true ]; then if [ "$NVM_IOJS" != true ] && [ "$NVM_NODE_MERGED" != true ]; then
if nvm_install_node_source "$VERSION" "$NVM_MAKE_JOBS" "$ADDITIONAL_PARAMETERS"; then if nvm_install_node_source "$VERSION" "$NVM_MAKE_JOBS" "$ADDITIONAL_PARAMETERS"; then
NVM_INSTALL_SUCCESS=true NVM_INSTALL_SUCCESS=true
@ -1794,18 +1801,22 @@ nvm() {
echo "$NVM_DIR/*/bin removed from \$PATH" echo "$NVM_DIR/*/bin removed from \$PATH"
fi fi
NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")" if [ -n "${MANPATH-}" ]; then
if [ "_$MANPATH" = "_$NEWPATH" ]; then NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" >&2 if [ "_$MANPATH" = "_$NEWPATH" ]; then
else echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" >&2
export MANPATH="$NEWPATH" else
echo "$NVM_DIR/*/share/man removed from \$MANPATH" export MANPATH="$NEWPATH"
echo "$NVM_DIR/*/share/man removed from \$MANPATH"
fi
fi fi
NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")" if [ -n "${NODE_PATH-}" ]; then
if [ "_$NODE_PATH" != "_$NEWPATH" ]; then NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")"
export NODE_PATH="$NEWPATH" if [ "_$NODE_PATH" != "_$NEWPATH" ]; then
echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH" export NODE_PATH="$NEWPATH"
echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH"
fi
fi fi
;; ;;
"use" ) "use" )
@ -1898,7 +1909,7 @@ nvm() {
hash -r hash -r
export NVM_PATH="$NVM_VERSION_DIR/lib/node" export NVM_PATH="$NVM_VERSION_DIR/lib/node"
export NVM_BIN="$NVM_VERSION_DIR/bin" export NVM_BIN="$NVM_VERSION_DIR/bin"
if [ "$NVM_SYMLINK_CURRENT" = true ]; then if [ "${NVM_SYMLINK_CURRENT-}" = true ]; then
command rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current" command rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current"
fi fi
local NVM_USE_OUTPUT local NVM_USE_OUTPUT
@ -2057,7 +2068,7 @@ nvm() {
"ls" | "list" ) "ls" | "list" )
local NVM_LS_OUTPUT local NVM_LS_OUTPUT
local NVM_LS_EXIT_CODE local NVM_LS_EXIT_CODE
NVM_LS_OUTPUT=$(nvm_ls "$2") NVM_LS_OUTPUT=$(nvm_ls "${2-}")
NVM_LS_EXIT_CODE=$? NVM_LS_EXIT_CODE=$?
nvm_print_versions "$NVM_LS_OUTPUT" nvm_print_versions "$NVM_LS_OUTPUT"
if [ $# -eq 1 ]; then if [ $# -eq 1 ]; then
@ -2067,7 +2078,7 @@ nvm() {
;; ;;
"ls-remote" | "list-remote" ) "ls-remote" | "list-remote" )
local PATTERN local PATTERN
PATTERN="$2" PATTERN="${2-}"
local NVM_IOJS_PREFIX local NVM_IOJS_PREFIX
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
local NVM_NODE_PREFIX local NVM_NODE_PREFIX
@ -2172,7 +2183,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d'
command mkdir -p "$NVM_ALIAS_DIR" command mkdir -p "$NVM_ALIAS_DIR"
if [ $# -le 2 ]; then if [ $# -le 2 ]; then
local DEST local DEST
for ALIAS_PATH in "$NVM_ALIAS_DIR"/"$2"*; do for ALIAS_PATH in "$NVM_ALIAS_DIR"/"${2-}"*; do
ALIAS="$(command basename "$ALIAS_PATH")" ALIAS="$(command basename "$ALIAS_PATH")"
DEST="$(nvm_alias "$ALIAS" 2> /dev/null)" DEST="$(nvm_alias "$ALIAS" 2> /dev/null)"
if [ -n "$DEST" ]; then if [ -n "$DEST" ]; then
@ -2202,7 +2213,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d'
done done
return return
fi fi
if [ -z "$3" ]; then if [ -z "${3-}" ]; then
command rm -f "$NVM_ALIAS_DIR/$2" command rm -f "$NVM_ALIAS_DIR/$2"
echo "$2 -> *poof*" echo "$2 -> *poof*"
return return