nvm
nvm copied to clipboard
init-nvm.sh fails under ksh
Operating system and version:
MacOS X 10.14.6
nvm debug
output:
-ksh[2354]: local: local can only be used in a function
-ksh[2369]: local: local can only be used in a function
-ksh[2374]: local: local can only be used in a function
-ksh[2375]: local: local can only be used in a function
-ksh[2474]: local: local can only be used in a function
-ksh[2354]: local: local can only be used in a function
-ksh[2369]: local: local can only be used in a function
-ksh[2374]: local: local can only be used in a function
-ksh[2375]: local: local can only be used in a function
nvm --version: v0.35.3
$TERM_PROGRAM: Apple_Terminal
$SHELL: /opt/local/bin/ksh
$SHLVL: 1
${HOME}: /Users/jries
-ksh[2301]: local: local can only be used in a function
${NVM_DIR}: '${HOME}/.nvm'
-ksh[2301]: local: local can only be used in a function
${PATH}: /build/apps/bin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/opt/X11/bin:${HOME}/Library/Python/3.8/bin:/opt/local/sbin
-ksh[2301]: local: local can only be used in a function
$PREFIX: ''
-ksh[2301]: local: local can only be used in a function
${NPM_CONFIG_PREFIX}: ''
$NVM_NODEJS_ORG_MIRROR: ''
$NVM_IOJS_ORG_MIRROR: ''
version sh (AT&T Research) 2020.0.0
shell version: ''
uname -a: 'Darwin 18.7.0 Darwin Kernel Version 18.7.0: Mon Feb 10 21:08:45 PST 2020; root:xnu-4903.278.28~1/RELEASE_X86_64 x86_64'
-ksh[1629]: local: local can only be used in a function
-ksh[1631]: local: local can only be used in a function
OS version: Mac 10.14.6 18G4032
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
curl: curl is a tracked alias for /opt/local/bin/curl, curl 7.69.1 (x86_64-apple-darwin18.7.0) libcurl/7.69.1 OpenSSL/1.1.1f zlib/1.2.11 libidn2/2.3.0 libpsl/0.21.0 (+libidn2/2.3.0)
wget: not found
-ksh[2515]: local: local can only be used in a function
-ksh[1629]: local: local can only be used in a function
-ksh[1631]: local: local can only be used in a function
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
sed: sed is a tracked alias for /usr/bin/sed
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
cut: cut is a tracked alias for /usr/bin/cut
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
basename: basename is a tracked alias for /usr/bin/basename
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
rm: rm is a tracked alias for /bin/rm
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
mkdir: mkdir is a tracked alias for /bin/mkdir
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
xargs: xargs is a tracked alias for /usr/bin/xargs
-ksh[2530]: local: local can only be used in a function
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
ls: git: No such file or directory
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
git: git is a tracked alias for /opt/local/bin/git, git version 2.26.2
-ksh[2530]: local: local can only be used in a function
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
ls: grep: No such file or directory
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
grep: grep is a tracked alias for /usr/bin/grep, grep (BSD grep) 2.5.1-FreeBSD
-ksh[2530]: local: local can only be used in a function
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
ls: awk: No such file or directory
-ksh[53]: local: local can only be used in a function
-ksh[54]: local: local can only be used in a function
awk: awk is a tracked alias for /usr/bin/awk, awk version 20070501
-ksh[2545]: local: local can only be used in a function
-ksh[2301]: local: local can only be used in a function
nvm current: -ksh[2354]: local: local can only be used in a function
-ksh[2369]: local: local can only be used in a function
-ksh[2374]: local: local can only be used in a function
-ksh[2375]: local: local can only be used in a function
-ksh[457]: local: local can only be used in a function
-ksh[459]: local: local can only be used in a function
-ksh[886]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[302]: local: local can only be used in a function
-ksh[304]: local: local can only be used in a function
-ksh[312]: local: local can only be used in a function
-ksh[302]: local: local can only be used in a function
-ksh[304]: local: local can only be used in a function
-ksh[312]: local: local can only be used in a function
system
-ksh[2301]: local: local can only be used in a function
which node: /opt/local/bin/node
-ksh[2301]: local: local can only be used in a function
which iojs:
-ksh[2301]: local: local can only be used in a function
which npm: /opt/local/bin/npm
-ksh[2301]: local: local can only be used in a function
npm config get prefix: /opt/local
-ksh[2301]: local: local can only be used in a function
npm root -g: /opt/local/lib/node_modules
$
nvm ls
output:
$ nvm ls
-ksh[2354]: local: local can only be used in a function
-ksh[2369]: local: local can only be used in a function
-ksh[2374]: local: local can only be used in a function
-ksh[2375]: local: local can only be used in a function
-ksh[3205]: local: local can only be used in a function
-ksh[3206]: local: local can only be used in a function
-ksh[3207]: local: local can only be used in a function
-ksh[3227]: local: local can only be used in a function
-ksh[3228]: local: local can only be used in a function
-ksh[1009]: local: local can only be used in a function
-ksh[1011]: local: local can only be used in a function
-ksh[1018]: local: local can only be used in a function
-ksh[1020]: local: local can only be used in a function
-ksh[1022]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1024]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1026]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[611]: local: local can only be used in a function
-ksh[999]: local: local can only be used in a function
-ksh[1044]: local: local can only be used in a function
-ksh[1059]: local: local can only be used in a function
-ksh[633]: local: local can only be used in a function
-ksh[1069]: local: local can only be used in a function
-ksh[1071]: local: local can only be used in a function
-ksh[1073]: local: local can only be used in a function
-ksh[1075]: local: local can only be used in a function
-ksh[1109]: local: local can only be used in a function
-ksh[1459]: local: local can only be used in a function
-ksh[1460]: local: local can only be used in a function
-ksh[1461]: local: local can only be used in a function
-ksh[1462]: local: local can only be used in a function
-ksh[886]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[302]: local: local can only be used in a function
-ksh[304]: local: local can only be used in a function
-ksh[312]: local: local can only be used in a function
-ksh[302]: local: local can only be used in a function
-ksh[304]: local: local can only be used in a function
-ksh[312]: local: local can only be used in a function
-ksh[1464]: local: local can only be used in a function
-ksh[73]: local: local can only be used in a function
-ksh[1468]: local: local can only be used in a function
-ksh[1469]: local: local can only be used in a function
-> system
-ksh[2354]: local: local can only be used in a function
-ksh[2369]: local: local can only be used in a function
-ksh[2374]: local: local can only be used in a function
-ksh[2375]: local: local can only be used in a function
-ksh[3335]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[3337]: local: local can only be used in a function
-ksh[886]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[302]: local: local can only be used in a function
-ksh[304]: local: local can only be used in a function
-ksh[312]: local: local can only be used in a function
-ksh[302]: local: local can only be used in a function
-ksh[304]: local: local can only be used in a function
-ksh[312]: local: local can only be used in a function
-ksh[3342]: local: local can only be used in a function
-ksh[3343]: local: local can only be used in a function
-ksh[3344]: local: local can only be used in a function
-ksh[802]: local: local can only be used in a function
-ksh[805]: local: local can only be used in a function
-ksh[886]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[302]: local: local can only be used in a function
-ksh[304]: local: local can only be used in a function
-ksh[312]: local: local can only be used in a function
-ksh[302]: local: local can only be used in a function
-ksh[304]: local: local can only be used in a function
-ksh[312]: local: local can only be used in a function
-ksh[807]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[812]: local: local can only be used in a function
[1] 2315
-ksh[750]: local: local can only be used in a function
-ksh[756]: local: local can only be used in a function
-ksh[762]: local: local can only be used in a function
-ksh[764]: local: local can only be used in a function
-ksh[820]: local: local can only be used in a function
[1] 2320
[2] 2321
[3] 2322
-ksh[772]: local: local can only be used in a function
-ksh[778]: local: local can only be used in a function
-ksh[1547]: local: local can only be used in a function
-ksh[1525]: local: local can only be used in a function
-ksh[772]: local: local can only be used in a function
-ksh[778]: local: local can only be used in a function
-ksh[1527]: local: local can only be used in a function
-ksh[1547]: local: local can only be used in a function
-ksh[1525]: local: local can only be used in a function
-ksh[1553]: local: local can only be used in a function
-ksh[1527]: local: local can only be used in a function
-ksh[772]: local: local can only be used in a function
-ksh[1555]: local: local can only be used in a function
-ksh[778]: local: local can only be used in a function
-ksh[1547]: local: local can only be used in a function
-ksh[1525]: local: local can only be used in a function
-ksh[1557]: local: local can only be used in a function
-ksh[1558]: local: local can only be used in a function
-ksh[1559]: local: local can only be used in a function
-ksh[1553]: local: local can only be used in a function
-ksh[693]: local: local can only be used in a function
-ksh[1555]: local: local can only be used in a function
-ksh[695]: local: local can only be used in a function
-ksh[697]: local: local can only be used in a function
-ksh[1527]: local: local can only be used in a function
-ksh[457]: local: local can only be used in a function
-ksh[459]: local: local can only be used in a function
-ksh[1557]: local: local can only be used in a function
-ksh[470]: local: local can only be used in a function
-ksh[1558]: local: local can only be used in a function
-ksh[1559]: local: local can only be used in a function
-ksh[1553]: local: local can only be used in a function
-ksh[1555]: local: local can only be used in a function
-ksh[1557]: local: local can only be used in a function
-ksh[1558]: local: local can only be used in a function
-ksh[1559]: local: local can only be used in a function
-ksh[1009]: local: local can only be used in a function
-ksh[1011]: local: local can only be used in a function
-ksh[1009]: local: local can only be used in a function
-ksh[1011]: local: local can only be used in a function
-ksh[1018]: local: local can only be used in a function
-ksh[1018]: local: local can only be used in a function
-ksh[1020]: local: local can only be used in a function
-ksh[1022]: local: local can only be used in a function
-ksh[1020]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1022]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1024]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1009]: local: local can only be used in a function
-ksh[1011]: local: local can only be used in a function
-ksh[1026]: local: local can only be used in a function
-ksh[1018]: local: local can only be used in a function
-ksh[1024]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1026]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1044]: local: local can only be used in a function
-ksh[1020]: local: local can only be used in a function
-ksh[1069]: local: local can only be used in a function
-ksh[1071]: local: local can only be used in a function
-ksh[1073]: local: local can only be used in a function
-ksh[968]: local: local can only be used in a function
-ksh[1075]: local: local can only be used in a function
-ksh[969]: local: local can only be used in a function
-ksh[1022]: local: local can only be used in a function
-ksh[909]: local: local can only be used in a function
-ksh[912]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[914]: local: local can only be used in a function
-ksh[916]: local: local can only be used in a function
-ksh[1024]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1026]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1044]: local: local can only be used in a function
-ksh[1069]: local: local can only be used in a function
-ksh[1071]: local: local can only be used in a function
-ksh[1073]: local: local can only be used in a function
-ksh[1075]: local: local can only be used in a function
-ksh[953]: local: local can only be used in a function
-ksh[1109]: local: local can only be used in a function
-ksh[611]: local: local can only be used in a function
-ksh[999]: local: local can only be used in a function
-ksh[1044]: local: local can only be used in a function
-ksh[1059]: local: local can only be used in a function
-ksh[633]: local: local can only be used in a function
-ksh[641]: local: local can only be used in a function
-ksh[643]: local: local can only be used in a function
-ksh[1069]: local: local can only be used in a function
-ksh[1071]: local: local can only be used in a function
-ksh[1073]: local: local can only be used in a function
-ksh[1075]: local: local can only be used in a function
-ksh[1109]: local: local can only be used in a function
-ksh[702]: local: local can only be used in a function
-ksh[703]: local: local can only be used in a function
-ksh[704]: local: local can only be used in a function
-ksh[708]: local: local can only be used in a function
-ksh[713]: local: local can only be used in a function
-ksh[73]: local: local can only be used in a function
-ksh[1600]: local: local can only be used in a function
-ksh[1601]: local: local can only be used in a function
-ksh[1602]: local: local can only be used in a function
-ksh[1603]: local: local can only be used in a function
-ksh[1604]: local: local can only be used in a function
-ksh[693]: local: local can only be used in a function
-ksh[695]: local: local can only be used in a function
-ksh[697]: local: local can only be used in a function
-ksh[457]: local: local can only be used in a function
-ksh[459]: local: local can only be used in a function
-ksh[470]: local: local can only be used in a function
-ksh[1009]: local: local can only be used in a function
-ksh[1011]: local: local can only be used in a function
-ksh[1018]: local: local can only be used in a function
-ksh[1020]: local: local can only be used in a function
-ksh[1022]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1024]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1026]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[968]: local: local can only be used in a function
-ksh[969]: local: local can only be used in a function
-ksh[909]: local: local can only be used in a function
-ksh[912]: local: local can only be used in a function
-ksh[914]: local: local can only be used in a function
-ksh[916]: local: local can only be used in a function
-ksh[611]: local: local can only be used in a function
-ksh[999]: local: local can only be used in a function
-ksh[1109]: local: local can only be used in a function
-ksh[702]: local: local can only be used in a function
-ksh[703]: local: local can only be used in a function
-ksh[704]: local: local can only be used in a function
-ksh[708]: local: local can only be used in a function
-ksh[713]: local: local can only be used in a function
-ksh[73]: local: local can only be used in a function
-ksh[1600]: local: local can only be used in a function
-ksh[1601]: local: local can only be used in a function
-ksh[1602]: local: local can only be used in a function
-ksh[1603]: local: local can only be used in a function
-ksh[1604]: local: local can only be used in a function
-ksh[772]: local: local can only be used in a function
-ksh[778]: local: local can only be used in a function
-ksh[1547]: local: local can only be used in a function
-ksh[1525]: local: local can only be used in a function
-ksh[1527]: local: local can only be used in a function
-ksh[1553]: local: local can only be used in a function
-ksh[1555]: local: local can only be used in a function
-ksh[1557]: local: local can only be used in a function
-ksh[1558]: local: local can only be used in a function
-ksh[1559]: local: local can only be used in a function
-ksh[1570]: local: local can only be used in a function
-ksh[1571]: local: local can only be used in a function
-ksh[1009]: local: local can only be used in a function
-ksh[1011]: local: local can only be used in a function
-ksh[1018]: local: local can only be used in a function
-ksh[1020]: local: local can only be used in a function
-ksh[1022]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1024]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1026]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1044]: local: local can only be used in a function
-ksh[1069]: local: local can only be used in a function
-ksh[1071]: local: local can only be used in a function
-ksh[1073]: local: local can only be used in a function
-ksh[1075]: local: local can only be used in a function
-ksh[999]: local: local can only be used in a function
-ksh[1109]: local: local can only be used in a function
-ksh[693]: local: local can only be used in a function
-ksh[695]: local: local can only be used in a function
-ksh[697]: local: local can only be used in a function
-ksh[457]: local: local can only be used in a function
-ksh[459]: local: local can only be used in a function
-ksh[470]: local: local can only be used in a function
-ksh[1009]: local: local can only be used in a function
-ksh[1011]: local: local can only be used in a function
-ksh[1018]: local: local can only be used in a function
-ksh[1020]: local: local can only be used in a function
-ksh[1022]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1024]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[1026]: local: local can only be used in a function
-ksh[393]: local: local can only be used in a function
-ksh[968]: local: local can only be used in a function
-ksh[969]: local: local can only be used in a function
-ksh[909]: local: local can only be used in a function
-ksh[912]: local: local can only be used in a function
-ksh[914]: local: local can only be used in a function
-ksh[916]: local: local can only be used in a function
-ksh[611]: local: local can only be used in a function
-ksh[999]: local: local can only be used in a function
-ksh[702]: local: local can only be used in a function
-ksh[703]: local: local can only be used in a function
-ksh[704]: local: local can only be used in a function
-ksh[708]: local: local can only be used in a function
-ksh[713]: local: local can only be used in a function
-ksh[73]: local: local can only be used in a function
iojs -> N/A (default)
node -> stable (-> N/A) (default)
unstable -> N/A (default)
-ksh[836]: local: local can only be used in a function
[1] 2427
-ksh[750]: local: local can only be used in a function
-ksh[756]: local: local can only be used in a function
-ksh[762]: local: local can only be used in a function
-ksh[764]: local: local can only be used in a function
How did you install nvm
?
MacPorts (port install nvm
)
What steps did you perform?
After installing the MacPorts version of ksh (the standard OSX one doesn't even recognize the local
command), I ran source /opt/local/share/nvm/init-nvm.sh
.
What happened?
-ksh: source[2]: source[3706]: local: local can only be used in a function -ksh: source[2]: source[3676]: local: local can only be used in a function -ksh: source[2]: source[886]: local: local can only be used in a function -ksh: source[2]: source[393]: local: local can only be used in a function -ksh: source[2]: source[302]: local: local can only be used in a function -ksh: source[2]: source[304]: local: local can only be used in a function -ksh: source[2]: source[312]: local: local can only be used in a function -ksh: source[2]: source[302]: local: local can only be used in a function -ksh: source[2]: source[304]: local: local can only be used in a function -ksh: source[2]: source[312]: local: local can only be used in a function -ksh: source[2]: source[3678]: local: local can only be used in a function -ksh: source[2]: source[3680]: local: local can only be used in a function
What did you expect to happen?
I expected the initialization script to complete silently.
Is there anything in any of your profile files that modifies the PATH
?
Yes.
PATH=/build/apps/bin:$PATH:$HOME/Library/Python/3.8/bin:/opt/local/sbin
export PATH
If you are having installation issues, or getting "N/A", what does curl -I --compressed -v https://nodejs.org/dist/
print out?
* Trying 2606:4700:10::6814:162e:443...
* Connected to nodejs.org (2606:4700:10::6814:162e) port 443 (#0)
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /opt/local/share/curl/curl-ca-bundle.crt
CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
* subject: OU=Domain Control Validated; OU=PositiveSSL Wildcard; CN=*.nodejs.org
* start date: Oct 21 00:00:00 2019 GMT
* expire date: Jan 18 23:59:59 2022 GMT
* subjectAltName: host "nodejs.org" matched cert's "nodejs.org"
* issuer: C=GB; ST=Greater Manchester; L=Salford; O=Sectigo Limited; CN=Sectigo RSA Domain Validation Secure Server CA
* SSL certificate verify ok.
> HEAD /dist/ HTTP/1.1
> Host: nodejs.org
> User-Agent: curl/7.69.1
> Accept: */*
> Accept-Encoding: deflate, gzip
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Date: Mon, 27 Apr 2020 20:49:13 GMT
Date: Mon, 27 Apr 2020 20:49:13 GMT
< Content-Type: text/html
Content-Type: text/html
< Connection: keep-alive
Connection: keep-alive
< Set-Cookie: __cfduid=d9b8004f7b343664771e9eaf3123ba85d1588020553; expires=Wed, 27-May-20 20:49:13 GMT; path=/; domain=.nodejs.org; HttpOnly; SameSite=Lax
Set-Cookie: __cfduid=d9b8004f7b343664771e9eaf3123ba85d1588020553; expires=Wed, 27-May-20 20:49:13 GMT; path=/; domain=.nodejs.org; HttpOnly; SameSite=Lax
< Cache-Control: max-age=14400
Cache-Control: max-age=14400
< CF-Cache-Status: HIT
CF-Cache-Status: HIT
< Age: 819
Age: 819
< Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
< Vary: Accept-Encoding
Vary: Accept-Encoding
< Server: cloudflare
Server: cloudflare
< CF-RAY: 58ab68ab197e9328-SJC
CF-RAY: 58ab68ab197e9328-SJC
< Content-Encoding: gzip
Content-Encoding: gzip
< cf-request-id: 025effbeea000093283e2f9200000001
cf-request-id: 025effbeea000093283e2f9200000001
<
* Connection #0 to host nodejs.org left intact
I can, if desired, try to put together a patch myself. I have dealt with these sorts of issues before.
All of those warnings in ksh are expected; nvm uses local on every variable. however, because we consistently use this pattern:
local foo
foo=bar
ksh warns on the local foo
line, and then the foo=bar
line is just a normal ksh local var, whereas every other shell creates a local var and then assigns it.
In other words, those warnings are expected and shouldn't interfere with nvm's functionality (see #574).
Separately, source /opt/local/share/nvm/init-nvm.sh
is very confusing - what is init-nvm.sh
? that's not a part of this project.
I had installed nvm via MacPorts and init-nvm.sh is part of that distribution. Apparently, it doesn't come from you. Subsequent to my filing the issue, I uninstalled the MacPorts version and installed nvm directly from Github, though I have not tried again with ksh (I temporarily switched my default shell to zsh, pending resolution of this issue). I will definitely try again with ksh, but I don't want my terminal littered with warnings every time I use nvm.
nvm is only supported when installed with the instructions in this repo.
I totally agree the warnings are disruptive; I'm more than happy to review a PR that fixes it, but I'm not sure how to do it that preserves local foo
in non-ksh shells :-/
You could define an environment variable LOCAL as "local" for shells that support it and blank otherwise.
I'm not sure if that actually works - i think it has to be a literal local foo
for shells to accept it. A PR that tested that would be appreciated tho.
I'd suggest adding local
as an alias for typeset
, such as:
alias local=typeset
Putting this in my .kshrc
before the call to . {path}/nvm.sh
silenced all the warnings about local: not found
. It may be that for this to work for the installation script (init-nvm.sh
), it would have be source
d, as aliases are not exported. I have not tested all the side effects, nor checked for which variables leaked due to them not actually being local.
As a solution to the general problem, we can try testing for ksh
and aliasing local
to typeset
at the start of the script, assuming it was not previously aliased. At the end of the script, we can unalias
it (only if we created it, of course).
Thus, at the top of the script, something like:
if [ $KSH_VERSION =~ ksh ] ; then
old_local_alias=$(alias local) 2>/dev/null
alias local=typeset
fi
And at the end of the script, something like:
if [ $KSH_VERSION =~ ksh ] ; then
if [[ -z $old_local_alias ]] ; then unalias local # Was not originally aliased
else alias local="${old_local_alias/#*=}" # Restore original alias value
fi
unset old_local_alias
fi
Something that worked for every runtime-called function in nvm would be great, yes. I'm not sure what that would be short of something like $is_ksh && local foo || typeset foo
at every callsite, though.
@ljharb Good point. I was thinking about installation and startup, not runtime. What about just recommending users include the alias in their .kshrc
? It seems to quiet the warnings, and the only issue is that the variables will not, in fact, be local.
(I apologize for recommending changes that I'm not taking the time to implement and test myself. Which is why I'm putting it forward as a suggestion, not a demand or request.)
That's a fine workaround in the meantime, but i wouldn't consider that the same thing as nvm supporting ksh.