Je peux exécuter une commande bash dans node.js comme ceci:
var sys = require('sys')
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec("ls -la", function(err, stdout, stderr) {
console.log(stdout);
});
Comment puis-je obtenir le code de sortie de cette commande (ls -la
dans cet exemple)? J'ai essayé de courir
exec("ls -la", function(err, stdout, stderr) {
exec("echo $?", function(err, stdout, stderr) {
console.log(stdout);
});
});
Cela revient toujours à 0 quel que soit le code de sortie de la commande précédente. Qu'est-ce que je rate?
Ces 2 commandes sont exécutées dans des coques séparées.
Pour obtenir le code, vous devriez pouvoir vérifier err.code
dans votre rappel.
Si cela ne fonctionne pas, vous devez ajouter un gestionnaire d'événements exit
par exemple.
dir = exec("ls -la", function(err, stdout, stderr) {
if (err) {
// should have err.code here?
}
console.log(stdout);
});
dir.on('exit', function (code) {
// exit code is code
});
De la docs:
Si une fonction
callback
est fournie, elle est appelée avec les arguments(error, stdout, stderr)
. En cas de succès,error
seranull
. En cas d'erreur,error
sera une instance de Error. Leerror.code
La propriété sera le code de sortie du processus enfant tandis queerror.signal
sera réglé sur le signal qui a mis fin au processus. Tout code de sortie autre que 0 est considéré comme une erreur.
Alors:
exec('...', function(error, stdout, stderr) {
if (error) {
console.log(error.code);
}
});
Devrait marcher.
Dans la documentation du noeud, j'ai trouvé cette information pour la fonction de rappel:
En cas de succès, l'erreur sera nulle. En cas d'erreur, erreur sera une instance de Erreur. La propriété error.code sera le code de sortie du processus enfant tandis que error.signal sera défini sur le signal qui a mis fin au processus. Tout code de sortie autre que 0 est considéré comme une erreur.