У меня есть вызов execSyn c следующим образом:
const { execSync } = require('child_process');
...
console.log('Checking Java version')
let java_version= execSync('java -version').toString();
console.log('Java version:', java_version);
console.log('java_version is empty string:', java_version=="");
if(!java_version)
throw Error('Java version was empty or null.');
Если я проверяю журналы, я вижу:
Checking Java version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
Java version:
java_version is empty string: true
[ERROR] 'Java version was empty or null.'
Проблема не в том, что команда не при запуске вывод команды не возвращается в виде буфера, как это должно быть. Это идет прямо к выходу Node. Кажется, любая другая команда правильно выводит свой стандартный вывод в Node. Я попытался изменить команду на execSync('echo "testing\n a different command\n\n"').toString();
, и все работает как положено, и результат возвращается правильно. Я также пытался перепродать его с помощью execSync('$(java -version)').toString()
и execSync('echo $(java -version)').toString()
, но не повезло.
Что здесь происходит?
Если это поможет, это на Ubuntu 19: 10
РЕДАКТИРОВАТЬ: Я решил это, запустив execSync('echo $(java -version 2>&1)').tostring()
, но я все еще хотел бы знать, почему и как он направлялся в стандартный вывод nodejs и обходил буфер execSyn c. Спасибо.