我知道子进程不能直接影响其父进程,但是,像nvm这样的工具是如何工作的?它是一个CLI工具;立即";在nodejs版本之间切换,我认为这意味着以某种方式修改PATH,以指向安装在PC上的不同二进制文件。
通过";立即";我的意思是,您可以打开一个shell,运行nvm use [version]
,并且该版本可以在同一个shell中使用。脚本如何更改运行它的shell的PATH?
我一直试图遵循源代码,但我被难住了
$ type nvm
nvm is a shell function from /home/jkugelman/.nvm/nvm.sh
脚本在子进程中运行,不能更改父进程中的环境变量。另一方面,shell函数在同一个shell中运行,可以操作环境。
如果您想查看它到底在做什么,请使用declare -pf
(打印功能(或which
:
$ declare -pf nvm
nvm () {
# code snipped
}
该命令很可能是一个函数。例如:
#!/bin/bash
function set_nvm() {
PATH="$1:$PATH"
}
获取上述文件的源代码,以便该函数在shell中可用。这可以在你的.bashrc
中完成,所以你不必每次都手动完成:
$ . test.sh
然后你可以像调用命令一样调用函数:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ set_nvm /tmp
$ echo $PATH
/tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin