Skip to content

Commit 00a8b36

Browse files
committed
[Fix] handle unbound shell variables.
Fixes #868.
1 parent 1e1a005 commit 00a8b36

File tree

1 file changed

+38
-27
lines changed

1 file changed

+38
-27
lines changed

nvm.sh

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,16 @@ nvm_print_npm_version() {
6868

6969
# Make zsh glob matching behave same as bash
7070
# This fixes the "zsh: no matches found" errors
71+
if [ -z "${NVM_CD_FLAGS-}"]; then
72+
export NVM_CD_FLAGS=''
73+
fi
7174
if nvm_has "unsetopt"; then
7275
unsetopt nomatch 2>/dev/null
7376
NVM_CD_FLAGS="-q"
7477
fi
7578

7679
# Auto detect the NVM_DIR when not set
77-
if [ -z "$NVM_DIR" ]; then
80+
if [ -z "${NVM_DIR-}" ]; then
7881
if [ -n "$BASH_SOURCE" ]; then
7982
NVM_SCRIPT_SOURCE="${BASH_SOURCE[0]}"
8083
fi
@@ -85,7 +88,7 @@ unset NVM_SCRIPT_SOURCE 2> /dev/null
8588

8689

8790
# Setup mirror location if not already set
88-
if [ -z "$NVM_NODEJS_ORG_MIRROR" ]; then
91+
if [ -z "${NVM_NODEJS_ORG_MIRROR-}" ]; then
8992
export NVM_NODEJS_ORG_MIRROR="https://nodejs.org/dist"
9093
fi
9194

@@ -529,7 +532,7 @@ nvm_strip_iojs_prefix() {
529532

530533
nvm_ls() {
531534
local PATTERN
532-
PATTERN="$1"
535+
PATTERN="${1-}"
533536
local VERSIONS
534537
VERSIONS=''
535538
if [ "$PATTERN" = 'current' ]; then
@@ -659,7 +662,7 @@ nvm_ls() {
659662
fi
660663
fi
661664

662-
if [ "$NVM_ADD_SYSTEM" = true ]; then
665+
if [ "${NVM_ADD_SYSTEM-}" = true ]; then
663666
if [ -z "$PATTERN" ] || [ "_$PATTERN" = "_v" ]; then
664667
VERSIONS="$VERSIONS$(command printf '\n%s' 'system')"
665668
elif [ "$PATTERN" = 'system' ]; then
@@ -700,6 +703,7 @@ nvm_ls_remote_index_tab() {
700703
local TYPE
701704
TYPE="$1"
702705
local PREFIX
706+
PREFIX=''
703707
case "$TYPE-$2" in
704708
iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;;
705709
node-std) PREFIX='' ;;
@@ -835,7 +839,7 @@ nvm_print_implicit_alias() {
835839
local NVM_ADD_PREFIX_COMMAND
836840
local LAST_TWO
837841
case "$NVM_IMPLICIT" in
838-
"$NVM_IOJS_PREFIX" | "$NVM_IOJS_RC_PREFIX")
842+
"$NVM_IOJS_PREFIX")
839843
NVM_COMMAND="nvm_ls_remote_iojs"
840844
NVM_ADD_PREFIX_COMMAND="nvm_add_iojs_prefix"
841845
if [ "_$1" = "_local" ]; then
@@ -1146,7 +1150,7 @@ nvm_install_node_binary() {
11461150
local REINSTALL_PACKAGES_FROM
11471151
REINSTALL_PACKAGES_FROM="$2"
11481152

1149-
if nvm_is_iojs_version "$PREFIXED_VERSION"; then
1153+
if nvm_is_iojs_version "$VERSION"; then
11501154
echo 'nvm_install_node_binary does not allow an iojs-prefixed version.' >&2
11511155
return 10
11521156
fi
@@ -1201,11 +1205,11 @@ nvm_install_node_binary() {
12011205
}
12021206

12031207
nvm_get_make_jobs() {
1204-
if nvm_is_natural_num "$1"; then
1208+
if nvm_is_natural_num "${1-}"; then
12051209
NVM_MAKE_JOBS="$1"
12061210
echo "number of \`make\` jobs: $NVM_MAKE_JOBS"
12071211
return
1208-
elif [ -n "$1" ]; then
1212+
elif [ -n "${1-}" ]; then
12091213
unset NVM_MAKE_JOBS
12101214
echo >&2 "$1 is invalid for number of \`make\` jobs, must be a natural number"
12111215
fi
@@ -1290,9 +1294,9 @@ nvm_install_node_source() {
12901294
command tar -xzf "$tmptarball" -C "$tmpdir" && \
12911295
cd "$tmpdir/node-$VERSION" && \
12921296
./configure --prefix="$VERSION_PATH" $ADDITIONAL_PARAMETERS && \
1293-
$make -j $NVM_MAKE_JOBS $MAKE_CXX && \
1297+
$make -j $NVM_MAKE_JOBS ${MAKE_CXX-} && \
12941298
command rm -f "$VERSION_PATH" 2>/dev/null && \
1295-
$make -j $NVM_MAKE_JOBS $MAKE_CXX install
1299+
$make -j $NVM_MAKE_JOBS ${MAKE_CXX-} install
12961300
)
12971301
then
12981302
if ! nvm_has "npm" ; then
@@ -1371,14 +1375,14 @@ nvm_die_on_prefix() {
13711375
return 2
13721376
fi
13731377

1374-
if [ -n "$PREFIX" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$PREFIX" >/dev/null 2>&1); then
1378+
if [ -n "${PREFIX-}" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$PREFIX" >/dev/null 2>&1); then
13751379
nvm deactivate >/dev/null 2>&1
13761380
echo >&2 "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"$PREFIX\""
13771381
echo >&2 "Run \`unset PREFIX\` to unset it."
13781382
return 3
13791383
fi
13801384

1381-
if [ -n "$NPM_CONFIG_PREFIX" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$NPM_CONFIG_PREFIX" >/dev/null 2>&1); then
1385+
if [ -n "${NPM_CONFIG_PREFIX-}" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$NPM_CONFIG_PREFIX" >/dev/null 2>&1); then
13821386
nvm deactivate >/dev/null 2>&1
13831387
echo >&2 "nvm is not compatible with the \"NPM_CONFIG_PREFIX\" environment variable: currently set to \"$NPM_CONFIG_PREFIX\""
13841388
echo >&2 "Run \`unset NPM_CONFIG_PREFIX\` to unset it."
@@ -1702,6 +1706,9 @@ nvm() {
17021706
fi
17031707
fi
17041708
if [ "$NVM_INSTALL_SUCCESS" != true ]; then
1709+
if [ -z "${NVM_MAKE_JOBS-}" ]; then
1710+
nvm_get_make_jobs
1711+
fi
17051712
if [ "$NVM_IOJS" != true ] && [ "$NVM_NODE_MERGED" != true ]; then
17061713
if nvm_install_node_source "$VERSION" "$NVM_MAKE_JOBS" "$ADDITIONAL_PARAMETERS"; then
17071714
NVM_INSTALL_SUCCESS=true
@@ -1794,18 +1801,22 @@ nvm() {
17941801
echo "$NVM_DIR/*/bin removed from \$PATH"
17951802
fi
17961803

1797-
NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
1798-
if [ "_$MANPATH" = "_$NEWPATH" ]; then
1799-
echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" >&2
1800-
else
1801-
export MANPATH="$NEWPATH"
1802-
echo "$NVM_DIR/*/share/man removed from \$MANPATH"
1804+
if [ -n "${MANPATH-}" ]; then
1805+
NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
1806+
if [ "_$MANPATH" = "_$NEWPATH" ]; then
1807+
echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" >&2
1808+
else
1809+
export MANPATH="$NEWPATH"
1810+
echo "$NVM_DIR/*/share/man removed from \$MANPATH"
1811+
fi
18031812
fi
18041813

1805-
NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")"
1806-
if [ "_$NODE_PATH" != "_$NEWPATH" ]; then
1807-
export NODE_PATH="$NEWPATH"
1808-
echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH"
1814+
if [ -n "${NODE_PATH-}" ]; then
1815+
NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")"
1816+
if [ "_$NODE_PATH" != "_$NEWPATH" ]; then
1817+
export NODE_PATH="$NEWPATH"
1818+
echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH"
1819+
fi
18091820
fi
18101821
;;
18111822
"use" )
@@ -1898,7 +1909,7 @@ nvm() {
18981909
hash -r
18991910
export NVM_PATH="$NVM_VERSION_DIR/lib/node"
19001911
export NVM_BIN="$NVM_VERSION_DIR/bin"
1901-
if [ "$NVM_SYMLINK_CURRENT" = true ]; then
1912+
if [ "${NVM_SYMLINK_CURRENT-}" = true ]; then
19021913
command rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current"
19031914
fi
19041915
local NVM_USE_OUTPUT
@@ -2057,7 +2068,7 @@ nvm() {
20572068
"ls" | "list" )
20582069
local NVM_LS_OUTPUT
20592070
local NVM_LS_EXIT_CODE
2060-
NVM_LS_OUTPUT=$(nvm_ls "$2")
2071+
NVM_LS_OUTPUT=$(nvm_ls "${2-}")
20612072
NVM_LS_EXIT_CODE=$?
20622073
nvm_print_versions "$NVM_LS_OUTPUT"
20632074
if [ $# -eq 1 ]; then
@@ -2067,7 +2078,7 @@ nvm() {
20672078
;;
20682079
"ls-remote" | "list-remote" )
20692080
local PATTERN
2070-
PATTERN="$2"
2081+
PATTERN="${2-}"
20712082
local NVM_IOJS_PREFIX
20722083
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
20732084
local NVM_NODE_PREFIX
@@ -2172,7 +2183,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d'
21722183
command mkdir -p "$NVM_ALIAS_DIR"
21732184
if [ $# -le 2 ]; then
21742185
local DEST
2175-
for ALIAS_PATH in "$NVM_ALIAS_DIR"/"$2"*; do
2186+
for ALIAS_PATH in "$NVM_ALIAS_DIR"/"${2-}"*; do
21762187
ALIAS="$(command basename "$ALIAS_PATH")"
21772188
DEST="$(nvm_alias "$ALIAS" 2> /dev/null)"
21782189
if [ -n "$DEST" ]; then
@@ -2202,7 +2213,7 @@ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d'
22022213
done
22032214
return
22042215
fi
2205-
if [ -z "$3" ]; then
2216+
if [ -z "${3-}" ]; then
22062217
command rm -f "$NVM_ALIAS_DIR/$2"
22072218
echo "$2 -> *poof*"
22082219
return

0 commit comments

Comments
 (0)