2015-11-04 77 views
1

當我從一個shell腳本中運行NVM,它似乎並沒有影響調用shell的環境:如何讓nvm在腳本中運行影響調用shell的環境?

$ node -v 
v4.1.1 
$ env | grep -i node 
MANPATH=/home/ubuntu/.nvm/versions/node/v4.1.1/share/man:/usr/local/rvm/rubies/ruby-2.2.1/share/man:/usr/local/man:/usr/local/share/man:/usr/share/man:/usr/local/rvm/man 
NVM_PATH=/home/ubuntu/.nvm/versions/node/v4.1.1/lib/node 
PATH=/home/ubuntu/.nvm/versions/node/v4.1.1/bin:/usr/local/rvm/gems/ruby-2.2.1/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-2.2.1/bin:/mnt/shared/bin:/home/ubuntu/workspace/node_modules/.bin:/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/shared/sbin:/opt/gitl:/opt/go/bin:/mnt/shared/c9/app.nw/bin:/usr/local/rvm/bin 
NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist 
NODE_PATH=/mnt/shared/lib/node_modules 
NVM_BIN=/home/ubuntu/.nvm/versions/node/v4.1.1/bin 
$ 
$ cat test 
#!/bin/bash 
. ~/.nvm/nvm.sh 
nvm use 0.10.40 
nvm alias default 0.10.40 
echo NVM_PATH=$NVM_PATH 
echo MANPATH=$MANPATH 
echo PATH=$PATH 
echo NVM_BIN=$NVM_BIN 

$ ./test 
Now using node v0.10.40 (npm v1.4.28) 
default -> 0.10.40 (-> v0.10.40) 
NVM_PATH=/home/ubuntu/.nvm/v0.10.40/lib/node 
MANPATH=/home/ubuntu/.nvm/v0.10.40/share/man:/usr/local/rvm/rubies/ruby-2.2.1/share/man:/usr/local/man:/usr/local/share/man:/usr/share/man:/usr/local/rvm/man 
PATH=/home/ubuntu/.nvm/v0.10.40/bin:/usr/local/rvm/gems/ruby-2.2.1/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-2.2.1/bin:/mnt/shared/bin:/home/ubuntu/workspace/node_modules/.bin:/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/shared/sbin:/opt/gitl:/opt/go/bin:/mnt/shared/c9/app.nw/bin:/usr/local/rvm/bin 
NVM_BIN=/home/ubuntu/.nvm/v0.10.40/bin 
$ 
$ node -v 
v4.1.1 
$ env | grep -i node 
MANPATH=/home/ubuntu/.nvm/versions/node/v4.1.1/share/man:/usr/local/rvm/rubies/ruby-2.2.1/share/man:/usr/local/man:/usr/local/share/man:/usr/share/man:/usr/local/rvm/man 
NVM_PATH=/home/ubuntu/.nvm/versions/node/v4.1.1/lib/node 
PATH=/home/ubuntu/.nvm/versions/node/v4.1.1/bin:/usr/local/rvm/gems/ruby-2.2.1/bin:/usr/local/rvm/gems/[email protected]/bin:/usr/local/rvm/rubies/ruby-2.2.1/bin:/mnt/shared/bin:/home/ubuntu/workspace/node_modules/.bin:/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/shared/sbin:/opt/gitl:/opt/go/bin:/mnt/shared/c9/app.nw/bin:/usr/local/rvm/bin 
NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist 
NODE_PATH=/mnt/shared/lib/node_modules 
NVM_BIN=/home/ubuntu/.nvm/versions/node/v4.1.1/bin 
$ 

什麼我需要劇本里面的「測試」這樣做是「節點-v 「在運行」./test「後會給我0.10.40嗎?

請注意,如果我打開一個新的終端,並輸入「node -v」,則獲得0.10.40。但由於某些原因,在我執行「測試」腳本的shell中,我似乎被4.1.1所困。

回答

1

Bash腳本運行在它們自己的進程上下文中,該進程上下文從父進程繼承它的環境。無法更改父級的環境。見Can a shell script set environment variables of the calling shell?

但是,就像你的腳本源與. ~/.nvm/nvm.sh NVM,你能源腳本,將在父shell的上下文中執行它:

$ node -v 
v4.1.1 
$ ./test 
Now using node v0.10.40 (npm v2.14.8) 
default -> 0.10.40 (-> v0.10.40) 
NVM_PATH=/Users/william/.nvm/v0.10.40/lib/node 
MANPATH=/Users/william/.nvm/v0.10.40/share/man:/Users/william/.rvm/rubies/ruby-2.1.2/share/man:/usr/local/share/man:/usr/share/man:/opt/X11/share/man:/usr/local/MacGPG2/share/man:/Users/william/.rvm/share/man:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/share/man:/Applications/Xcode.app/Contents/Developer/usr/share/man:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man 
PATH=/Users/william/.nvm/v0.10.40/bin:/Users/william/.rvm/gems/ruby-2.1.2/bin:/Users/william/.rvm/gems/[email protected]/bin:/Users/william/.rvm/rubies/ruby-2.1.2/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/MacGPG2/bin:~/local/bin:~/bin:/Users/william/.rvm/bin:/Users/william/.rvm/bin:./node_modules/.bin:/usr/local/heroku/bin 
NVM_BIN=/Users/william/.nvm/v0.10.40/bin 
$ node -v 
v4.1.1 
$ source ./test 
Now using node v0.10.40 (npm v2.14.8) 
default -> 0.10.40 (-> v0.10.40) 
NVM_PATH=/Users/william/.nvm/v0.10.40/lib/node 
MANPATH=/Users/william/.nvm/v0.10.40/share/man:/Users/william/.rvm/rubies/ruby-2.1.2/share/man:/usr/local/share/man:/usr/share/man:/opt/X11/share/man:/usr/local/MacGPG2/share/man:/Users/william/.rvm/share/man:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/share/man:/Applications/Xcode.app/Contents/Developer/usr/share/man:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/share/man 
PATH=/Users/william/.nvm/v0.10.40/bin:/Users/william/.rvm/gems/ruby-2.1.2/bin:/Users/william/.rvm/gems/ruby-2.1[email protected]/bin:/Users/william/.rvm/rubies/ruby-2.1.2/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/MacGPG2/bin:~/local/bin:~/bin:/Users/william/.rvm/bin:/Users/william/.rvm/bin:./node_modules/.bin:/usr/local/heroku/bin 
NVM_BIN=/Users/william/.nvm/v0.10.40/bin 
$ node -v 
v0.10.40 
相關問題