Javascript Node JS NPM shell scripting

How to run shell script file or command using Nodejs?

nodejs npm
Written by Vithal Reddy

If you ever wanted to run some automation script or file in your Unix/Linux machine using nodejs?
It may be to build your binaries from source code or for some tooling in your dev workflow. Nodejs Provides well-matured APIs for doing these operations and there are plenty of npm modules to ease the pain creating shell or terminal based cli’s using nodejs. We will explore both options one by one.

Run Shell or bash command using Nodejs

We will be using Node.js inbuilt module  child_process for doing this operation.

For buffered, non-stream formatted output:

const { exec } = require('child_process');
exec('ls | grep js', (err, stdout, stderr) => {
  if (err) {
    //some err occurred
  } else {
   // the *entire* stdout and stderr (buffered)
   console.log(`stdout: ${stdout}`);
   console.log(`stderr: ${stderr}`);

If you want  to use promises,

const util = require('util');
const exec = util.promisify(require('child_process').exec);

async function lsWithGrep() {
  try {
      const { stdout, stderr } = await exec('ls | grep js');
      console.log('stdout:', stdout);
      console.log('stderr:', stderr);
  }catch (err)=>{


If you want to use output stream,

const { spawn } = require('child_process');
const child = spawn('ls', );

// use child.stdout.setEncoding('utf8'); if you want text chunks
child.stdout.on('data', (chunk) => {
  // data from the standard output is here as buffers

// since these are streams, you can pipe them elsewhere

child.on('close', (code) => {
  console.log(`child process exited with code ${code}`);

if you want to execute shell script synchronously,

Then check out following APIs:

const { execSync } = require('child_process');
// stderr is sent to stdout of parent process
// you can set options.stdio if you want it to go elsewhere
const stdout = execSync('ls');

const { spawnSync} = require('child_process');
const child = spawnSync('ls', );

console.error('error', child.error);
console.log('stdout ', child.stdout);
console.error('stderr ', child.stderr);


Run Shell or bash file using Nodejs

if you want to execute whole shell script file, instead of commands, Then see the following code,
You can use any of the above methods to achieve this functionality.

const exec = require('child_process').exec, child;
const myShellScript = exec('sh /myDir');

myShellScript.stdout.on('data', (data)=>{
    // do whatever you want here with data

myShellScript.stderr.on('data', (data)=>{

Nodejs Documentation for this can found here.

you can also use child_process.execFile method also to executing file.

If you want to  use, third-party npm modules, then check out:

You can find many more in

Now you can do some scripting Nodejs. Happy scripting. These Methods come pretty handily when you’re building custom dev workflow or you want to do some automation when in the workflow.

About the author

Vithal Reddy

Vithal Reddy is a seasoned technology professional with expertise in Full Stack Web development, Micro services and Scaling infrastructure on Cloud.
More at