如何影响Linux中的父进程环境



我知道子进程不能直接影响其父进程,但是,像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

相关内容

  • 没有找到相关文章

最新更新