je voudrais exécuter la commande suivante à l'aide Spawn nodejs sur un système Debian: /usr/bin/apt-get upgrade -s | tail -1 | cut -f1 -d' '
Je veux utiliser spawn et non exec à cause de l'utilisation future de racine uniquement les commandes et Je ne veux pas permettre un accès shell complet (je vais mettre à jour le fichier visudo avec des commandes correctes) Voici mon codeSpawn dans nodejs pour une commande unix avec des espaces dans les paramètres
const apt = spawn('/usr/bin/apt-get', ['upgrade', '-s']);
const tail = spawn('tail', ['-1']);
const cut = spawn('cut', ['-f1', '-d" "']);
apt.stdout.on('data', (data) => {
tail.stdin.write(data);
});
tail.stdout.on('data', (data) => {
cut.stdin.write(data);
});
cut.stdout.on('data', (data) => {
console.log(data.toString());
});
apt.stderr.on('data', (data) => {
console.log("apt stderr: ${data}");
});
tail.stderr.on('data', (data) => {
console.log("tail stderr: ${data}");
});
cut.stderr.on('data', (data) => {
console.log("cut stderr: ${data}");
});
apt.on('close', (code) => {
if (code !== 0) {
console.log("apt process exited with code ${code}");
}
});
tail.on('close', (code) => {
if (code !== 0) {
console.log("tail process exited with code ${code}");
}
});
cut.on('close', (code) => {
if (code !== 0) {
console.log("cut process exited with code ${code}");
}
});
res.status(200).json('');
une fois exécuté j'ai une erreur à cause du paramètre « -d » « » ce n'est pas reconnu. J'essaie fuyais l'espace avec un double \ ou diviser le paramètre dans les deux, mais encore des erreurs
Merci Charles! Cela a fonctionné et j'ai aussi compris pourquoi ;-) J'ai manqué le shell besoin Un autre point: cela signifie que pour une commande comme '/ bin/grep -P '^ \ d + upgraded''i devrait l'écrire comme' spawn ('grep', ['-P', '"^ \\ d +', 'mis à jour"']) '? –
''^ \ d + upgraded'' est analysé par le shell en une seule chaîne (c'est l'un des effets des guillemets simples syntaxiques), donc ce serait' spawn (' grep ', [' -P ','^\\ d + mis à jour ']) 'pour écrire cette même chaîne unique en JavaScript. –
Pour commencer, comprendre comment cela fonctionne sur le shell peut être http://mywiki.wooledge.org/Quotes ou http://wiki.bash-hackers.org/syntax/quoting, et http: // mywiki.wooledge.org/BashParser –