Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Node.js中设置全局环境变量_Node.js_Bash_Spawn_Env - Fatal编程技术网

从Node.js中设置全局环境变量

从Node.js中设置全局环境变量,node.js,bash,spawn,env,Node.js,Bash,Spawn,Env,我正在尝试从node.js应用程序中设置全局环境变量 目标是: 重新启动应用程序时,仍应设置环境变量 打开新外壳时,它应该是可用的 如果可能:重新启动时,与1相同 它应该可以在Linux、Mac OS X上运行(并且需要windows的备用SET命令) 以下是我所做的: var setEnv = require('child_process') .spawn('export GLOBALVARNAME='+my.value,{ stdio: 'inherit'

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

目标是:

  • 重新启动应用程序时,仍应设置环境变量
  • 打开新外壳时,它应该是可用的
  • 如果可能:重新启动时,与1相同
  • 它应该可以在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
    -不是吗


    因此,主要的问题是:手动导出GLOBALVARNAME=foobar有什么问题?

    export
    不是一个独立的命令,而是一个shell内置命令,用于为当前shell进程及其子进程设置环境变量,并在设置后分叉

    不能为不是当前进程后代的进程设置环境变量。在Linux下,没有系统环境变量

    在Linux下,应该在生成应用程序的init脚本或systemd单元中设置变量。如果希望它在交互式用户shell中可用,则应在
    /etc/profile
    /etc/profile.d

    .

    尝试一下:

    我认为子进程不可能更改父进程的进程环境。所以我真的认为不可能使用
    child\u进程

    示例代码:

    var shell = require('shelljs');
    shell.exec('export ENV_VARIABLE=ABRACADABRA');
    

    正如其他答案所指出的,剥离和更改环境变量基本上是一个简单的过程。您可以更改当前进程及其子进程的环境,也可以更改新进程的环境。编辑
    /etc/profile
    将对@Hmlth所说的任何新流程进行更改

    如果要更改当前流程的环境,这是直接的:

    process.env.YOUR_VAR = 'your_value';
    

    你是对的,使用child_进程是不起作用的。思想导出使事物全球化,其效果与父shell无关…它在windows中也不起作用。shelljs的主要目标是多平台,我认为它是一个独立的命令。。。这很糟糕。所以我需要打开一个文件并写入其中。该死演示如何访问您的环境,而无需进行炮击。它也适用于写操作。要了解为什么它会给您
    enoint
    签出