Sid*_*rth 2 linux node.js gulp
假设有一个变量key1,它的值是123
key1=123
Run Code Online (Sandbox Code Playgroud)
所以当我在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());
});
Run Code Online (Sandbox Code Playgroud)
在这里,我试图通过使用Child Process从nodejs访问linux变量的值
但是当我运行以下gulp任务时,我没有得到所需的输出.
npm run gulp -- printKeyValue
Run Code Online (Sandbox Code Playgroud)
相反,我得到输出,$key1而不是123.
见下面的截图
其他命令如ls&pwdgulp task中提供了所需的输出.
有人可以帮忙解决这个问题或提出另一种方法吗?
您没有导出变量.当你这么做的时候
key1=123
Run Code Online (Sandbox Code Playgroud)
变量不会传播到子进程.它将在您当前的bash进程中可用,因此您可以在键入时看到它echo $key1,但它不会被node进程继承.如上所述man bash:
当要执行除builtin或shell函数之外的简单命令时,将在由以下内容组成的单独执行环境中调用它.除非另有说明,否则值将从shell继承.
[...]
标记为导出的shell变量和函数,以及为该命令导出的变量,在环境中传递
您需要将变量定义为已导出
export key1=123
Run Code Online (Sandbox Code Playgroud)
或标记现有变量以进行导出
key1=123
export key1
Run Code Online (Sandbox Code Playgroud)
或者通过bash先天功能启动具有修改环境的节点
key1=123 node code.js
Run Code Online (Sandbox Code Playgroud)
或使用/usr/bin/env实用程序:
env key1=123 node code.js
Run Code Online (Sandbox Code Playgroud)
将变量正确传递给节点进程后,它将在子进程中process.env.key1和$key1在进程中都可用.
编辑:我刚注意到,你实际上给了你正在运行的命令; 无关紧要,每个可执行文件都有相同的逻辑,无论是否node或npm其他任何东西.
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |