【问题标题】:How to access shell variable value from Node.js?如何从 Node.js 访问 shell 变量值?
【发布时间】:2018-10-16 11:36:56
【问题描述】:

假设有一个变量key1,其值为123

key1=123

所以当我在 linux 环境echo $key1 中运行命令时,我得到的输出为123

现在我有以下 gulp 任务。

const child_process = require('child_process');
....
gulp.task('printKeyValue', function() {
    var value1 = child_process.execSync('echo $key1');
    console.log(value1.toString().trim());
});

在这里,我正在尝试使用 Child Process 从 nodejs 访问 linux 变量的值

但是当我运行以下 gulp 任务时,我没有得到想要的输出。

npm run gulp -- printKeyValue

相反,我得到的输出为$key1 而不是123

看下面的截图

gulp 任务中的其他命令(如 lspwd)会提供所需的输出。

有人可以帮忙解决这个问题或提出其他方法吗?

【问题讨论】:

标签: node.js linux gulp


【解决方案1】:

您没有导出变量。当你这样做时

key1=123

变量不会传播到子进程。它将在您当前的bash 进程中可用,因此您可以在键入echo $key1 时看到它,但它不会被node 进程继承。正如man bash 所说:

当要执行除内置函数或 shell 函数之外的简单命令时,它会在由以下内容组成的单独执行环境中调用。除非另有说明,否则这些值都是从 shell 继承的。

  • [...]

  • 标记为导出的shell变量和函数,以及为命令导出的变量,在环境中传递

您需要将变量定义为导出

export key1=123

或标记现有变量以供导出

key1=123
export key1

或使用修改后的环境启动您的节点,或者通过 bash 的固有功能来这样做

key1=123 node code.js

或使用/usr/bin/env 实用程序:

env key1=123 node code.js

一旦变量被正确地传递给节点进程,它将在process.env.key1 和子进程中作为$key1 可用。

编辑:我刚刚注意到,您实际上给出了您正在运行的命令;没关系,相同的逻辑适用于每个可执行文件,无论是 nodenpm 还是其他任何东西。

【讨论】:

    猜你喜欢
    • 2020-05-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2018-08-10
    • 2021-10-15
    • 2020-12-21
    相关资源
    最近更新 更多