|
символ в командной строке называется «трубопровод», потому что это, как трубопроводные потоки данных вместе. Вы хотите получить столы stdin
(Standard In) и stdout
(Standard Out) для команд, которые вы выполняете.
Например, это то, как вы породит эхо команды и свирели его вывод к Grep:
var spawn = require('child_process').spawn;
var echo = spawn('echo', ['The quick brown fox\njumped over the lazy dog.']);
var grep = spawn('grep', ['brown']);
echo.stdout.pipe(grep.stdin);
grep.stdout.pipe(process.stdin);
Приведенный выше пример порождает оба «эхо» и команды «Grep». Он передает любой вывод из потока echo
процесса stdout
в поток grep
процесса stdin
. Наконец, мы передаем поток grep
процесса stdout
в процесс родительского процесса (ваш узел) stdin
, чтобы вы могли видеть результат в своем терминале.
Выход будет «Быстрая коричневая лиса», потому что я положил символ новой строки в середине, и grep только соответствовал первой строке, содержащей «коричневый».
Вы можете использовать функцию exec
для достижения того же результата. Просто может быть сложнее поддерживать в будущем, но если вам нужно всего лишь быстро запустить набор команд, вы можете ввести полную строку командной строки (включая символы труб) и передать ее в exec
.
var exec = require('child_process').exec;
var cmdString = 'grep "The quick brown fox\njumped over the lazy dog." | grep "brown"';
exec(cmdString, (err, stdout, stderr) => {
console.log(stdout);
});
Или вместо передачи в функции обратного вызова можно просто перенаправить вывод в process.stdin
, если все, что вы заботитесь о видит вывод команды.
exec(cmdString).stdout.pipe(process.stdin);
Вот краткий пример того, что я считаю, что ваш код должен выглядеть используя spawn
. Может потребоваться ухищрения, так как это похоже на то, что вы делаете.
var keyArgs = [
'-exportcert',
'-storepass','mypass',
'-keypass','mypass',
'-alias','myalias',
'-keystore',"myjey.keystore",
'openssl','sha1',
'-binary',
'openssl','base64',
];
var keyOpts = {
cwd: `${appCreateFolder}/${opt.id}/Certificates`
};
var spawn = require('child_process').spawn;
var keytool = spawn('keytool', keyArgs, keyOpts);
var opensslBinary = spawn('openssl', ['sha1', '-binary']);
var opensslBase64 = spawn('openssl', ['base64']);
keytool.stdout.pipe(opensslBinary.stdin);
opensslBinary.stdout.pipe(opensslBase64.stdin);
opensslBase64.stdout.pipe(process.stdin);
opensslBase64.on('close',() => {
console.log(chalk.cyan('Key created.'));
});
Или с помощью exec
:
var exec = require('child_process').exec;
var cmdString = 'keytool -exportcert -storepass mypass -keypass mypass -alias myalias -keystore mykey.keystore | openssl sha1 -binary | openssl base64';
var cmdOpts = {
cwd: `${appCreateFolder}/${opt.id}/Certificates`
};
exec(cmdString, cmdOpts,() => {
console.log(chalk.cyan('Key created.'));
});
Помог ли мой ответ? – Chev