为什么nodejs exec / spawn不显示bash'history'命令的任何输出?

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

我正在Ubuntu上运行此程序,并尝试了exec / spawn函数(及其同步副本)的许多变体,但没有一个可以向我显示bash'history'命令的输出。一种情况如下:

const { spawnSync} = require('child_process');
const child = spawnSync('history', { shell: "/bin/bash" });

console.log('error: ', child.error);
console.log('stdout: ', child.stdout.toString());
console.log('stderr: ', child.stderr);

它不显示任何错误,并且输出为空。我认为这个问题更多地与“命令历史”命令的“特殊性”或类别有关,而不是与nodejs的功能有关,因为它们对于ls,pwd,whoami等正常命令都可以正常工作。我查看了我的.bash_history文件,并在其中填充了历史记录,所以这不是问题。

另一个可能类似的问题是ll命令也失败了,即使我将bash设置为shell。但是对于ll,它确实返回错误:

/ bin / bash:ll:找不到命令

只需确定,我尝试在bash中运行ll命令,效果很好。我在这里想念什么?

编辑:我做了更多的测试,这似乎更像是bash而非节点。当我简单地编写history命令时,bash打印结果,但是当我执行bash -c history时,它不显示任何输出,也没有错误。

image of bash output

node.js linux bash shell exec
1个回答
1
投票

您需要订阅来自子进程的消息

 child.on('error', (err) => {
 });

 child.stderr.on('data', (data) => {
 });

 child.on('exit', (code, signal) => {
 });
© www.soinside.com 2019 - 2024. All rights reserved.