Node 的 child_process.exec 导致 OSX 上“找不到命令”?

问题描述 投票:0回答:1

如果我直接在终端中运行命令(psql),它就可以工作。但如果我这样做

childProcess.exec('psql ...')
,则会在 OSX 上导致“/bin/sh: psql: command not find”。两者都适用于 Linux 的 Windows 子系统。

我尝试了

whereis psql
并将其添加到 PATH,然后
console.log(process.env.PATH)
childProcess.exec('echo $PATH')
都包含 psql 目录,但我仍然得到“命令未找到”。如果我这样做
childProcess.exec('/opt/homebrew/bin/psql ...')
,它就可以工作,但我不能只是硬编码每个命令的路径。

这是怎么回事?我该如何解决?

childProcess.exec
是否忽略 OSX 上的 PATH?

javascript node.js exec
1个回答
0
投票

我是新来的,正在努力发挥作用。我认为这可能是问题和解决方案:

原因

该问题可能是由于 macOS 上 Node.js 生成的子进程未正确设置 PATH 环境变量。

解决方案

第 1 步:使用 childProcess.exec 生成子进程时显式设置 PATH 环境变量。

第 2 步:将具有包含 PATH 变量的 env 属性的对象传递给 childProcess.exec。

示例

const childProcess = require('child_process');

const command = 'psql ...'; // Your psql command here

const options = {
  env: {
    PATH: process.env.PATH // Include the existing PATH variable
 }
};

childProcess.exec(command, options, (error, stdout, stderr) => {
  if (error) {
    console.error(`Error executing command: ${error}`);
    return;
 }

 console.log(`Command output: ${stdout}`);
});

说明

  • 在代码片段中,我通过将子进程的 PATH 环境变量包含在选项对象的 env 属性中来设置它。

  • 这可确保生成的子进程可以访问与终端环境相同的 PATH 设置,从而使其能够成功查找并执行 psql 命令。

© www.soinside.com 2019 - 2024. All rights reserved.