La |
simbolo sulla riga di comando si chiama "piping" perché è come flussi di tubazioni di dati insieme. Quello che vuoi è ottenere i flussi stdin
(Standard In) e stdout
(Standard Out) per i comandi che stai eseguendo.
Ad esempio, questo è come è possibile generare il comando echo tubo è output 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);
L'esempio sopra genera entrambe le "eco" e comandi "grep". Canalizza qualsiasi output dal flusso stdout
del processo al flusso stdin
del processo grep
. Infine canalizziamo lo stream stdout
del processo grep
nel flusso del processo genitore (processo del nodo) stdin
in modo da poter vedere l'output nel terminale.
L'output sarebbe "The quick brown fox" perché ho inserito un carattere di nuova riga nel mezzo e il grep ha trovato solo la prima riga che contiene "brown".
È possibile utilizzare la funzione exec
per ottenere lo stesso risultato. Potrebbe essere più difficile da mantenere in futuro, ma se tutto ciò di cui hai bisogno è eseguire rapidamente una serie di comandi in pipe, puoi inserire l'intera stringa della riga di comando (compresi i simboli pipe) e passarla a 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);
});
O invece di passare nella funzione di callback si poteva solo inviare l'output a process.stdin
se tutto ciò che interessa è vedere l'output del comando.
exec(cmdString).stdout.pipe(process.stdin);
Ecco un rapido esempio di quello che io credo il codice dovrebbe essere simile utilizzando spawn
. Può richiedere modifiche poiché sembra specifico per quello che stai facendo.
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.'));
});
o utilizzando 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.'));
});
La mia risposta ti ha aiutato? – Chev