我可以从 Node 的 child_process 访问 CLI 程序吗?

Can I access CLI programs from within Node's child_process?

我写了一个节点脚本 cd 按顺序放入多个目录并执行 bash 命令以便将 repos 的内容部署到我的开发环境。

本机 bash 命令工作正常,如 cdls,但它看起来像 subshel​​l 或子进程(或任何适当的术语,我不明白由 node 打开的 Bash) 的内部工作机制对我的正常提示没有任何可用的内容。

例如

是否可以从节点子 shell 访问这些 programs/commands?我正在使用 child_process 节点模块。

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

function command (command) {
    exec (command, (err, stdout, stderr) => {
        if (err) {
            error(err);
        } else {
            message(`stdout: ${stdout}`);
            message(`stderr: ${stderr}`);
        }
    });
}

用作:

command('nvm use 6');
command('gulp build');
command('pde deploy');

子进程不是 运行 作为 bash。 child_process 使用常规 sh shell 生成可执行文件。 如果您需要 bash 中的 运行 命令,您 运行 的命令行需要包含在 bash -c 中。例如:

command('bash -c "my command here"');

此外,您运行的每个命令都是一个子进程,不会影响父进程,也不会影响任何后续子进程。因此,像 cd 这样的内置 shell 只会更改该子进程的目录,该目录会立即消失。如果你 运行:

你会看到这个
command('cd /');
command('ls');

ls 命令将显示当前工作目录,而不是根目录。

如果您 运行 使用 bash -c$PATH 的命令以及其他环境变量仍然没有按照您需要的方式设置,您需要调试 shell 启动脚本。也许交互式 shells (.bash_profile) 和所有 shells (.bashrc).

之间存在差异

请注意,完全非交互式 shell 可能需要明确指定要 运行 的启动脚本。