是否可以永久设置环境变量?
问题描述:
我需要一种永久设置环境变量的方法。我现在只能在Windows上工作,但是理想情况下我想要一个与操作系统无关的解决方案。从我可以告诉,但Node将只为当前进程/子进程设置var。我甚至想要什么?是否可以永久设置环境变量?
答
大概可以使用setx
和export
,虽然不确定需要的含义/特权(我假设在Windows中需要一个UAC凹凸,而在linux中你需要sudo)。这里有一个猜测:
var exec = require('child_process').exec;
// Add FOO to global environment with value BAR
// setEnv('FOO', 'BAR', callback)
// Append /foo/bar to PATH
// setEnv('PATH', '+=;/foo/bar', callback)
function setEnv(name, value, cb) {
if (!name) throw new Error('name required.');
if (typeof value === 'undefined') throw new Error('value required.');
var cmd;
if (value.indexOf('+=') === 0) value = process.env[name] + value.substring(2);
value = value.indexOf(' ') > -1 ? `"${value}"` : value;
switch (process.platform) {
case 'linux': cmd = `export ${name}=${value}`; break;
case 'win32': cmd = `setx ${name} ${value} /m"; break;
default: throw new Error('unsupported platform.'); break;
}
exec(cmd, cb);
}
我应该提到这真的不是理想;我建议将它们定义为执行任务的一部分,或者使用类似dotenv的东西。
+0
为什么这不理想? – user3715648
+0
我无法想到为什么我会在节点脚本的上下文中修改系统级环境值。我的意思是*可能*在一个实例中,比如从一个生成器中安装某些东西,但我仍然不希望修改我的环境包。 –
“永久地”影响其他炮弹并继续重新启动?这是非常特定的平台,甚至取决于该人使用的shell。我不知道有一个库这样做,也不是一个好主意,因为如果你开始干扰环境变量到他们的shell配置中,人们有权为难。 – tadman