[Fix] `default_packages`: work when the file lacks a trailing newline

Fixes #1995.
diff --git a/nvm.sh b/nvm.sh
index bf9a1a3..a1cc7bf 100644
--- a/nvm.sh
+++ b/nvm.sh
@@ -3495,12 +3495,18 @@
 }
 
 nvm_get_default_packages() {
-  if [ -f "${NVM_DIR}/default-packages" ]; then
+  local NVM_DEFAULT_PACKAGE_FILE="${NVM_DIR}/default-packages"
+  if [ -f "${NVM_DEFAULT_PACKAGE_FILE}" ]; then
     local DEFAULT_PACKAGES
     DEFAULT_PACKAGES=''
 
     # Read lines from $NVM_DIR/default-packages
     local line
+    # ensure a trailing newline
+    WORK=$(mktemp -d) || exit $?
+    trap "rm -rf '$WORK'" EXIT
+    # shellcheck disable=SC1003
+    sed -e '$a\' "${NVM_DEFAULT_PACKAGE_FILE}" > "${WORK}/default-packages"
     while IFS=' ' read -r line; do
       # Skip empty lines.
       [ -n "${line-}" ] || continue
@@ -3517,7 +3523,7 @@
       esac
 
       DEFAULT_PACKAGES="${DEFAULT_PACKAGES}${line} "
-    done < "${NVM_DIR}/default-packages"
+    done < "${WORK}/default-packages"
     echo "${DEFAULT_PACKAGES}" | xargs
   fi
 }
diff --git a/test/fast/Unit tests/nvm_get_default_packages b/test/fast/Unit tests/nvm_get_default_packages
index 115bdf6..75730b0 100755
--- a/test/fast/Unit tests/nvm_get_default_packages
+++ b/test/fast/Unit tests/nvm_get_default_packages
@@ -53,13 +53,28 @@
 setup
 
 cat > $FILE << EOF
+rimraf
+not~a~package~name
+mkdirp
+EOF
+printf %s "$(cat "${FILE}")" > $FILE # strip trailing newline
+
+DEFAULT_PKGS="$(nvm_get_default_packages)"
+EXPECTED_PKGS='rimraf not~a~package~name mkdirp'
+[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "3: 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}<"
+[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "4: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
 
 cleanup
 
@@ -69,7 +84,7 @@
 
 DEFAULT_PKGS="$(nvm_get_default_packages)"
 EXPECTED_PKGS=''
-[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "4: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
+[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "5: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"
 
 touch $FILE
 
diff --git a/test/installation_node/default-packages b/test/installation_node/default-packages
index ad08aa5..7b1cfca 100755
--- a/test/installation_node/default-packages
+++ b/test/installation_node/default-packages
@@ -30,8 +30,11 @@
 # commented-package
 
 stevemao/left-pad
+daytime
 EOF
 
+printf %s "$(cat "${FILE}")" > $FILE # strip trailing newline
+
 nvm install v6.10.1 2>&1
 EXIT_CODE=$?
 [ "_$EXIT_CODE" = "_0" ] || die "expected 'nvm install v6.10.1' to exit with 0, got $EXIT_CODE"
@@ -41,6 +44,11 @@
   die "expected 'nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'rimraf'' to exit with 0, got $?"
 fi
 
+nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'daytime'
+if [ -z "$?" ]; then
+  die "expected 'nvm exec v6.10.1 npm ls -g --depth=0 | grep -q 'daytime'' to exit with 0, got $?"
+fi
+
 cleanup
 
 setup