node.js - 在 Node.js 之外设置全局环境变量

标签 node.js bash spawn env

我正在尝试从我的 node.js 应用程序中设置一个全局环境变量。

目标是:

  1. 重启APP时,环境变量仍要设置
  2. 打开一个新的shell,应该可以使用
  3. 如果可能:重新启动时,与 1 相同。
  4. 它应该可以在 Linux、Mac OS X 上运行(并且需要一个用于 windows 的备用 SET 命令)

这是我做的:

var setEnv = require('child_process')
        .spawn('export GLOBALVARNAME='+my.value,{
          stdio: 'inherit',
          env: process.env
        });

但这会导致

{ [Error: spawn export GLOBALVARNAME=foobar ENOENT]
  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'spawn export GLOBALVARNAME=foobar',
  path: 'export GLOBALVARNAME=foobar',
  spawnargs: [] }

我没有在 Windows 上对此进行测试,但在 Mac OS X(和 Linux)上,bash 上的正确命令是 export GLOBALVARNAME=value。对于 Windows,正确的命令应该是 SET GLOBALVARNAME=value - 不是吗?

所以主要问题是:手动操作 export GLOBALVARNAME=foobar 出了什么问题?

最佳答案

正如其他答案所指出的,炮击和更改环境变量基本上是一个 NO-OP .您想要更改当前流程及其子流程的环境,或者您想要为新流程更改环境。如@Hmlth 所说,编辑 /etc/profile 将对任何新进程进行更改。

如果您想更改当前流程的环境,这很简单:

process.env.YOUR_VAR = 'your_value';

关于node.js - 在 Node.js 之外设置全局环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32523101/

相关文章:

javascript - 什么是未处理的 promise 拒绝?

javascript - 在 Node.js 中修改大量 json 文件/数组时的奇怪之处

javascript - AWS EC2 上未建立套接字连接

javascript - NodeJs 将 PNG 转换为 SVG?

perl - 如何使用 sed/awk/perl 从数字中删除前导和尾随零?

用于更新 ssl.conf 中 ssl 证书文件路径的 Bash 脚本

Bash 脚本 : How can I patch files?(在文件的给定位置写入给定的字符串)

node.js - ExpressJS 末尾的参数个数可变

node.js - 为什么我通过 spawn() 创建的 Node 子进程挂起?

javascript - Node.js 捕获生成后引发的 ENOMEM 错误