【问题标题】:set an environmental variable in node.js and then use it in terminal?在 node.js 中设置一个环境变量,然后在终端中使用它?
【发布时间】:2014-05-06 00:55:27
【问题描述】:

我想在使用 node.js 执行 js 文件期间添加一个环境变量。

类似: process.env['VARIABLE'] = '值';

我正在使用终端使用模块运行js文件,我可以设置变量然后在js文件执行期间使用它,但我想使用“process.env”设置变量,然后当执行结束时,我想在终端中使用它,或者在另一个js进程中使用它。

我知道可以使用 child_process.exec,并使用 SET (Windows) 或 EXPORT (Mac & Linux),但只是询问它是如何可能的,或者使用哪个设计或流程来添加它,只需使用“process.env”。

提前谢谢各位。

【问题讨论】:

    标签: javascript node.js variables environment-variables


    【解决方案1】:

    unix 权限模型不允许子进程(您的 node.js 应用程序)更改其父进程(在终端内运行的 shell)的环境。这同样适用于当前工作目录、有效 uid、有效 gid 和其他几个每个进程的参数。 AFAIK 没有直接的方法可以满足您的要求。您可以执行诸如打印命令以将其设置为 stdout 之类的操作,以便用户可以轻松地将该 shell 命令复制/粘贴到他们的终端中,但您最好的办法是在一个单独的问题中解释您试图解决的更广泛的问题,并让人们告诉您完成此任务的可行方法,而不是尝试更改父进程的环境。

    一种可能的解决方法很简单,例如从终端运行节点程序,如下所示:

    export SOME_ENV_VAR="$(node app.js)"
    

    app.js 只需通过process.stdout.write 打印所需的值。

    第二个 hack 将是一个封装 shell 脚本,如下所示:

    app.sh

    #!/bin/bash
    echo app.sh running with SOME_ENV_VAR=${SOME_ENV_VAR}
    echo "app.sh running app.js"
    export SOME_ENV_VAR="$(node app.js)"
    exec /bin/bash
    

    app.js

    console.log("Some Value at " + Date());
    

    在终端的交互式 shell 中运行它

    echo $SOME_ENV_VAR
    
    exec ./app.sh
    app.sh running with SOME_ENV_VAR=
    app.sh running app.js
    
    echo $SOME_ENV_VAR 
    Some Value at Thu Mar 27 2014 08:13:01 GMT-0600 (MDT)
    

    也许这些会给你一些想法。

    【讨论】:

    • 优秀的@PeterLyons,你的建议很聪明,你是对的,没有直接的方法可以从 js 中做到这一点,非常感谢你的帮助。
    猜你喜欢
    • 2011-12-04
    • 1970-01-01
    • 2020-05-31
    • 2019-02-08
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多