如何在Node.js中导出环境变量

14

我非常喜欢我的node.js,因此我想在我的bash启动脚本~/.bashrc中使用它,但是我不知道如何导出变量。

目前我必须使用这种方法:

export PS1=`node ~/PS1.js`
export PS2=`node ~/PS2.js`
export PATH=`node ~/PATH.js`

相反,我希望.bashrc看起来是这样的


Explanation: This translates to "On the contrary, I want .bashrc to look like this" while retaining the HTML tags and without adding any additional explanations.
#!/usr/local/bin/node
//do something, define functions
export_var('PS1', PS1())
export_var('PS2', PS2())
export_var('PATH', generatePATH())

process.env.PATH = something 只对当前正在执行的进程即 Node 本身进行设置,而不会 导出,也就是说不会在其他地方使用。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - rafaelcastrocouto
def factorial(n): if n == 0: return 1 else: return n * factorial(n-1)print(factorial(5))输出: 120 - rafaelcastrocouto
2
@rafaelcastrocouto,您不理解问题,却试图关闭它?我需要从node.js内部更改变量,并让父进程保留它。您所提到的问题是关于在node.js启动之前更改PORT变量。 - exebook
你需要获取文本吗?你需要在主进程内手动打开进程吗?在.bashrc导出时,使用单引号而不是反引号,并将命令作为字符串获取。 - GabrielBiga
@GabrielBiga,我不需要获取变量的文本,我需要将其持久化设置,这在Linux中称为“导出变量”。 - exebook
3个回答

11

Node.js将在单独的进程中运行,并获取环境的副本。您无法更改执行.bashrc的父进程(即父shell)的环境变量。

但以下问题有一个答案适用于您: Shell脚本可以设置调用shell的环境变量吗?

您可以从node.js中编写新的脚本文件,然后通过source调用它。


2
你能否添加一个代码示例,因为我不明白如何从node.js中获取脚本:“您可以在node.js内部编写一个新的脚本文件,并通过source调用它。” - Molten Ice
怎么可能工作呢?脚本应该在父shell中执行,但这是不可能的。 - zdm

11

一种可能的方法是使用JS打印出导出语句,然后在shell中使用eval在当前shell中评估它。

例如:test.js

#!/usr/bin/env node
console.log('export A=40; export B=10');

在终端中:

eval `./test.js`
echo $A

这是简单而干净的魔法!对于使用yarn的人,在运行命令时,请使用“yarn --silent <script>”。 - bombillazo
超级干净的解决方案。运行得非常好。谢谢! - Roland Ayala

-1

在我的情况下它有效:

const exportVar = (name, value) => {
    process.env[name] = value;
};

exportVar("NODE_ENV", "test");

但在某些情况下,玩exec(或spawn)也可能很有用:

const { execSync } = require('child_process');

execSync("NODE_ENV=test && echo $NODE_ENV", {
    stdio: 'inherit',
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接