Скажем, у меня есть это:
const cp = require('child_process');
fs.createReadStream(__dirname + '/dummy.sh')
.pipe(cp.spawn('bash').stdin).on('data', d => {
console.info('data:', d);
});
а dummy.sh содержит только echo "this is dummy", по какой-то причине в обратном вызове on data не проходят никакие данные. Кто-нибудь знает, почему это может быть? Я ожидал этого результата data: this is dummy





Вы не прослушиваете вывод своей команды бить.
Обработчик события on('data') не запускает вывод вашего скрипта бить.
Вместо этого следует слушать процесс стандартный вывод:
const fs = require('fs');
const cp = require('child_process');
let cmd = cp.spawn('bash');
fs.createReadStream(__dirname + '/dummy.sh')
.pipe(cmd.stdin).pipe(cmd.stdout).on('data', d => {
console.info('data:', d.toString()); // data: this is dummy
});
Нет, сам по себе pipe() не вызывает вывод порожденного процесса. В этом случае он передает вывод cmd.stdin, который логически ничего не содержит. Чтобы убедиться в этом, вы можете попробовать связать .pipe(fs.createWriteStream('out.txt')) с cmd.stdout и без pipe().
да я бы просто догадался, что
.pipe(cmd.stdin)вернетсяcmd.stdout, верно?