我可以从 Node 的 child_process 访问 CLI 程序吗?
Can I access CLI programs from within Node's child_process?
我写了一个节点脚本 cd
按顺序放入多个目录并执行 bash 命令以便将 repos 的内容部署到我的开发环境。
本机 bash 命令工作正常,如 cd
、ls
,但它看起来像 subshell 或子进程(或任何适当的术语,我不明白由 node 打开的 Bash) 的内部工作机制对我的正常提示没有任何可用的内容。
例如
- 全球可用的自定义 bash 工具集
nvm
(这甚至有可能 运行 节点子外壳中的不同版本的节点吗?)
- gulp 中断,因为它没有安装必要的节点版本。
是否可以从节点子 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 可能需要明确指定要 运行 的启动脚本。
我写了一个节点脚本 cd
按顺序放入多个目录并执行 bash 命令以便将 repos 的内容部署到我的开发环境。
本机 bash 命令工作正常,如 cd
、ls
,但它看起来像 subshell 或子进程(或任何适当的术语,我不明白由 node 打开的 Bash) 的内部工作机制对我的正常提示没有任何可用的内容。
例如
- 全球可用的自定义 bash 工具集
nvm
(这甚至有可能 运行 节点子外壳中的不同版本的节点吗?)- gulp 中断,因为它没有安装必要的节点版本。
是否可以从节点子 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 可能需要明确指定要 运行 的启动脚本。