2015-07-03 135 views
0

我一直在使用nodejs中的spawn运行可执行文件,现在当我尝试使用spawn运行ubuntu命令(如unset,export等)时,它们看起来不像上班。我猜是因为它正在寻找可执行文件。 我甚至尝试过exec,这似乎不起作用。有小费吗?如何从Nodejs运行Linux/Ubuntu命令(不可执行文件)

我有一个ubuntu设备运行节点,从UI我需要为代理设置/取消设置env变量,例如http_proxy和no_proxy。除了出口以外,我还可以通过节点做什么? env变量应该被设置为系统范围,而不仅仅是当前进程。

+2

这些是shell内置的,而不是可执行文件。听起来像一个XY问题,但你究竟想要做什么? – robertklep

+0

是的,他们是壳内置的,我想设置和取消设置env变量。我可以在命令前添加bash或sh,并通过产卵运行? –

+1

你见过''spawn''(https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options)的'env'选项吗? – robertklep

回答

1

环境变量只存在于内存中,并且是进程本地的。对于任何正在运行的进程,只有进程本身可以更改“属于”该进程的一组环境变量,但这些更改不会传播到现有的子进程或父进程。

简而言之:您无法更改将应用​​于系统上所有进程的环境变量(甚至不是来自常规shell)。

,使其成为可供新建子进程(子进程默认继承其父的设置环境变量),你只能设置一个环境变量,但仅此而已。

如果你有过怎样要求这些特定环境的过程变量开始控制,你可以这些变量的值写入(从节点)的文件和源该文件中的其他进程正在启动权之前,但是这实际上取决于实际使用情况,这是否可用。

+0

我的用例是设置env变量并使'request'模块使用env变量。 https://www.npmjs.com/package/request#proxies。根据文档请求尊重像'http_proxy'这样的env变量,我已经在/ etc/profile文件中设置了env变量,但这需要重启设备。 –

+0

@monotheist并且您正在从不从UI服务器启动的单独进程运行'request',我想?为什么不将代理设置写入(JSON)文件并从您调用'request'的进程加载? – robertklep

+0

没有请求是来自同一个进程,所以这意味着'请求'将在设置beign之后兑现env变量。我已经将代理设置写入json文件。请求也需要'代理'参数,所以如果它通过设置env变量不起作用,我会从json中读取它并传递给请求。 –

相关问题