Execute and get the output of a shell command in node.js Execute and get the output of a shell command in node.js shell shell

Execute and get the output of a shell command in node.js


This is the method I'm using in a project I am currently working on.

var exec = require('child_process').exec;function execute(command, callback){    exec(command, function(error, stdout, stderr){ callback(stdout); });};

Example of retrieving a git user:

module.exports.getGitUser = function(callback){    execute("git config --global user.name", function(name){        execute("git config --global user.email", function(email){            callback({ name: name.replace("\n", ""), email: email.replace("\n", "") });        });    });};


If you're using node later than 7.6 and you don't like the callback style, you can also use node-util's promisify function with async / await to get shell commands which read cleanly. Here's an example of the accepted answer, using this technique:

const { promisify } = require('util');const exec = promisify(require('child_process').exec)module.exports.getGitUser = async function getGitUser () {  const name = await exec('git config --global user.name')  const email = await exec('git config --global user.email')  return { name, email }};

This also has the added benefit of returning a rejected promise on failed commands, which can be handled with try / catch inside the async code.


You're looking for child_process

var exec = require('child_process').exec;var child;child = exec(command,   function (error, stdout, stderr) {      console.log('stdout: ' + stdout);      console.log('stderr: ' + stderr);      if (error !== null) {          console.log('exec error: ' + error);      }   });

As pointed out by Renato, there are some synchronous exec packages out there now too, see sync-exec that might be more what yo're looking for. Keep in mind though, node.js is designed to be a single threaded high performance network server, so if that's what you're looking to use it for, stay away from sync-exec kinda stuff unless you're only using it during startup or something.