Node.js 为什么nodejs exec/spawn不显示bash';历史';指挥部?

Node.js 为什么nodejs exec/spawn不显示bash';历史';指挥部?,node.js,linux,bash,shell,exec,Node.js,Linux,Bash,Shell,Exec,我在Ubuntu上运行这个程序,并尝试了许多不同的exec/spawn函数(以及它们的同步对应函数),但没有一个可以向我显示bash“history”命令的输出。一种情况如下: const { spawnSync} = require('child_process'); const child = spawnSync('history', { shell: "/bin/bash" }); console.log('error: ', child.error); console.log('std

我在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_历史文件,其中充满了历史,所以这不是问题所在

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

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

为了确保这一点,我尝试在bash中运行
ll
命令,但效果很好。我错过了什么

编辑:我做了更多的测试,它看起来更像是bash的东西,而不是节点的东西。当我简单地编写
history
命令时,bash会打印结果,但当我编写
bash-c history
时,它不会显示任何输出,也不会显示错误


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

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

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

 child.on('exit', (code, signal) => {
 });

结果与我自己的代码相同。除了您的代码之外,我还订阅了stdout,但是这个结果从来没有为history命令打印过。其他命令正在打印它们的结果。它可能是bash而不是node吗?