mirror of
https://github.com/nvm-sh/nvm.git
synced 2026-09-18 00:00:30 +08:00
Under bash's `set +h`, `hash -r` errors with "hash: hashing disabled",
which is then printed on every `nvm use`, including the one at shell startup.
Guarding on `$-` alone would be wrong:
`zsh` never puts `h` in `$-` - there `h` is `HIST_IGNORE_DUPS` -
and `dash` has no `h` flag at all,
so it would skip the call in 3 of the 4 shells the fast suite runs.
Gate on the shell instead, and skip only where the call fails:
bash under `set +h`, and `ksh93`, whose `hash` takes no `-r` and whose
usage error aborts `nvm use` before it can export `NVM_BIN`.
`ksh` is detected by probing rather than by version,
so `mksh` and `pdksh`, which do accept `-r`, keep getting the call.
The `${-#*h}` test is from #3910.
Refs #2065
Refs #3247
30 lines
901 B
Bash
Executable File
30 lines
901 B
Bash
Executable File
#!/bin/sh
|
|
|
|
die () { echo "$@" ; exit 1; }
|
|
|
|
export NVM_DIR="$(cd ../.. && pwd)"
|
|
|
|
: nvm.sh
|
|
\. ../../nvm.sh
|
|
\. ../common.sh
|
|
|
|
make_fake_node v0.2.3 || die 'unable to make fake node v0.2.3'
|
|
make_fake_node v0.10.1 || die 'unable to make fake node v0.10.1'
|
|
|
|
nvm use --delete-prefix v0.2.3 >/dev/null 2>&1 || die 'failed to activate v0.2.3'
|
|
|
|
# run `node` from this shell, so that the shell caches where it found it
|
|
node >/dev/null 2>&1 || die 'fake node v0.2.3 is not runnable'
|
|
|
|
nvm use --delete-prefix v0.10.1 >/dev/null 2>&1 || die 'failed to activate v0.10.1'
|
|
|
|
ACTUAL="$(node)"
|
|
[ "${ACTUAL}" = 'v0.10.1' ] || die "expected node v0.10.1 after switching versions, got '${ACTUAL}'"
|
|
|
|
nvm deactivate >/dev/null 2>&1 || die 'failed to deactivate'
|
|
|
|
RESOLVED="$(command -v node || true)"
|
|
case "${RESOLVED}" in
|
|
"${NVM_DIR}"/*) die "after deactivating, node still resolves inside \${NVM_DIR}: ${RESOLVED}" ;;
|
|
esac
|