[Refactor] extract “get default packages” logic to `nvm_get_default_packages`
diff --git a/.gitignore b/.gitignore
index 6d7d6d6..fcf59f8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,7 +15,7 @@
 
 .DS_Store
 current
-default-packages
+/default-packages
 
 # Only apps should have lockfiles
 npm-shrinkwrap.json
diff --git a/nvm.sh b/nvm.sh
index f2744c6..bf9a1a3 100644
--- a/nvm.sh
+++ b/nvm.sh
@@ -2631,28 +2631,12 @@
         shift
       done
 
-      if [ -z "${SKIP_DEFAULT_PACKAGES-}" ] && [ -f "${NVM_DIR}/default-packages" ]; then
-        DEFAULT_PACKAGES=""
-
-        # Read lines from $NVM_DIR/default-packages
-        local line
-        while IFS=" " read -r line; do
-          # Skip empty lines.
-          [ -n "${line}" ] || continue
-
-          # Skip comment lines that begin with `#`.
-          [ "$(nvm_echo "${line}" | command cut -c1)" != "#" ] || continue
-
-          # Fail on lines that have multiple space-separated words
-          case $line in
-            *\ *)
-              nvm_err "Only one package per line is allowed in the ${NVM_DIR}/default-packages file. Please remove any lines with multiple space-separated values."
-              return 1
-            ;;
-          esac
-
-          DEFAULT_PACKAGES="${DEFAULT_PACKAGES}${line} "
-        done < "${NVM_DIR}/default-packages"
+      if [ -z "${SKIP_DEFAULT_PACKAGES-}" ]; then
+        DEFAULT_PACKAGES="$(nvm_get_default_packages)"
+        EXIT_CODE=$?
+        if [ $EXIT_CODE -ne 0 ]; then
+          return $EXIT_CODE
+        fi
       fi
 
       if [ -n "${PROVIDED_REINSTALL_PACKAGES_FROM-}" ] && [ "$(nvm_ensure_version_prefix "${PROVIDED_REINSTALL_PACKAGES_FROM}")" = "${VERSION}" ]; then
@@ -3486,7 +3470,8 @@
         nvm_version_greater nvm_version_greater_than_or_equal_to \
         nvm_print_npm_version nvm_install_latest_npm nvm_npm_global_modules \
         nvm_has_system_node nvm_has_system_iojs \
-        nvm_download nvm_get_latest nvm_has nvm_install_default_packages nvm_curl_use_compression nvm_curl_version \
+        nvm_download nvm_get_latest nvm_has nvm_install_default_packages nvm_get_default_packages \
+        nvm_curl_use_compression nvm_curl_version \
         nvm_supports_source_options nvm_auto nvm_supports_xz \
         nvm_echo nvm_err nvm_grep nvm_cd \
         nvm_die_on_prefix nvm_get_make_jobs nvm_get_minor_version \
@@ -3509,8 +3494,37 @@
   esac
 }
 
+nvm_get_default_packages() {
+  if [ -f "${NVM_DIR}/default-packages" ]; then
+    local DEFAULT_PACKAGES
+    DEFAULT_PACKAGES=''
+
+    # Read lines from $NVM_DIR/default-packages
+    local line
+    while IFS=' ' read -r line; do
+      # Skip empty lines.
+      [ -n "${line-}" ] || continue
+
+      # Skip comment lines that begin with `#`.
+      [ "$(nvm_echo "${line}" | command cut -c1)" != "#" ] || continue
+
+      # Fail on lines that have multiple space-separated words
+      case $line in
+        *\ *)
+          nvm_err "Only one package per line is allowed in the ${NVM_DIR}/default-packages file. Please remove any lines with multiple space-separated values."
+          return 1
+        ;;
+      esac
+
+      DEFAULT_PACKAGES="${DEFAULT_PACKAGES}${line} "
+    done < "${NVM_DIR}/default-packages"
+    echo "${DEFAULT_PACKAGES}" | xargs
+  fi
+}
+
 nvm_install_default_packages() {
   nvm_echo "Installing default global packages from ${NVM_DIR}/default-packages..."
+  nvm_echo "npm install -g --quiet $1"
 
   if ! nvm_echo "$1" | command xargs npm install -g --quiet; then
     nvm_err "Failed installing default packages. Please check if your default-packages file or a package in it has problems!"
diff --git a/test/fast/Unit tests/nvm_get_default_packages b/test/fast/Unit tests/nvm_get_default_packages
new file mode 100755
index 0000000..115bdf6
--- /dev/null
+++ b/test/fast/Unit tests/nvm_get_default_packages
@@ -0,0 +1,76 @@
+#!/bin/sh
+
+FILE="$NVM_DIR/default-packages"
+\. ../../../nvm.sh
+
+die () { echo "$@" ; cleanup ; exit 1; }
+setup () {
+  if [ -f $FILE ]; then
+    ORIG_DEFAULT_PACKAGES=$(cat $FILE)
+    mkdir -p ./tmp/ ||:
+    mv $FILE ./tmp/default-packages ||:
+  fi
+  touch $FILE
+}
+cleanup () {
+  if [ "$ORIG_DEFAULT_PACKAGES" != "" ]; then
+    rm -rf ./tmp/
+    echo "$ORIG_DEFAULT_PACKAGES" > $FILE
+  fi
+}
+
+setup
+
+cat > $FILE << EOF
+rimraf
+object-inspect@1.0.2
+
+# commented-package
+
+stevemao/left-pad
+EOF
+
+DEFAULT_PKGS="$(nvm_get_default_packages)"
+EXPECTED_PKGS='rimraf object-inspect@1.0.2 stevemao/left-pad'
+[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "1: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
+
+cleanup
+
+setup
+
+cat > $FILE << EOF
+rimraf
+not~a~package~name
+mkdirp
+EOF
+
+DEFAULT_PKGS="$(nvm_get_default_packages)"
+EXPECTED_PKGS='rimraf not~a~package~name mkdirp'
+[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "2: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
+
+cleanup
+
+setup
+
+cat > $FILE << EOF
+object-inspect @ 1.0.2
+rimraf
+EOF
+
+DEFAULT_PKGS="$(nvm_get_default_packages 2>&1 >/dev/null)"
+EXPECTED_PKGS="Only one package per line is allowed in the $FILE file. Please remove any lines with multiple space-separated values."
+[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "3: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
+
+cleanup
+
+setup
+
+rm -rf $FILE
+
+DEFAULT_PKGS="$(nvm_get_default_packages)"
+EXPECTED_PKGS=''
+[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "4: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
+
+touch $FILE
+
+cleanup
diff --git a/test/fast/Unit tests/nvm_default_packages b/test/installation_node/default-packages
similarity index 97%
rename from test/fast/Unit tests/nvm_default_packages
rename to test/installation_node/default-packages
index 0ae318d..ad08aa5 100755
--- a/test/fast/Unit tests/nvm_default_packages
+++ b/test/installation_node/default-packages
@@ -21,7 +21,7 @@
 
 setup
 
-\. ../../../nvm.sh
+\. ../../nvm.sh
 
 cat > $FILE << EOF
 rimraf
@@ -45,7 +45,7 @@
 
 setup
 
-\. ../../../nvm.sh
+\. ../../nvm.sh
 
 cat > $FILE << EOF
 rimraf