Почему nodejs exec / spawn не показывает никакого вывода для bash команды 'history'? - PullRequest
1 голос
/ 26 апреля 2020

Я запускаю это в Ubuntu и перепробовал множество вариантов функций exec / spawn (и их syn c аналогов), и ни одна из них не может показать мне вывод для 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);

Он не показывает никаких ошибок, и вывод пуст. Я думаю, что этот вопрос больше относится к 'speciality' или категории команды history, чем к функции nodejs, так как они отлично работают для обычных команд, таких как ls, pwd, whoami, et c работают нормально. Я посмотрел на мой файл .bash_history, и он заполнен историей, поэтому проблема не в этом.

Другая проблема, которая может быть похожей, - это команда ll, которая также не работает, хотя я установил bash в качестве оболочки. Но для ll возвращается ошибка:

/ bin / bash: ll: команда не найдена

Просто чтобы быть уверенным, я попытался запустить Команда ll в bash работала просто отлично. Чего мне здесь не хватает?

edit: Я провел еще несколько тестов, которые больше похожи на bash, чем на узлы. Когда я просто пишу команду history, bash печатает результаты, но когда я делаю bash -c history, она не показывает никакого вывода, но также и не выдает ошибку.

image of bash output.

1 Ответ

1 голос
/ 26 апреля 2020

Вам необходимо подписаться на сообщения от дочернего процесса

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

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

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