Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 1,000,000+ packages pre-installed, including exec-sh with all npm packages installed. Try it out:

var execSh = require("exec-sh")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

exec-sh v0.3.4

Execute shell command forwarding all stdio.



NPM Downloads Build Status Coverage Status David Status

Execute shell command forwarding all stdio streams.


exec-sh is a wrapper for child_process.spawn with some improvements:

  • Cross platform command execution:
    • Windows: cmd /C COMMAND
    • others: sh -c COMMAND
  • Fowrards all stdio streams to current terminal (by default):
    • execSh("bash")
    • execsh("echo -n Say: && read i && echo Said:$i")
  • stdout and stderr are passed to callback when available
    • execSh("pwd", console.log)


// JavaScript

execSh("echo hello exec-sh && bash", { cwd: "/home" }, function(err){
  if (err) {
    console.log("Exit code: ", err.code);
# Terminal output: interactive bash session

hello exec-sh
bash-3.2$ pwd
bash-3.2$ exit 99
Exit code:  99


var execSh = require("../");

// run interactive bash shell
execSh("echo lorem && bash", { cwd: "/home" }, function(err){
  if (err) {
    console.log("Exit code: ", err.code);

  // collect streams output
  var child = execSh(["bash -c id", "echo lorem >&2"], true,
    function(err, stdout, stderr){
      console.log("error: ", err);
      console.log("stdout: ", stdout);
      console.log("stderr: ", stderr);

Promise Interface

var execShPromise = require("exec-sh").promise;

// run interactive bash shell
const run = async () => {
  let out;

  try {
    out = await execShPromise('pwd', true);
  } catch (e) {
    console.log('Error: ', e);
    console.log('Stderr: ', e.stderr);
    console.log('Stdout: ', e.stdout);

    return e;

  console.log('out: ', out.stdout, out.stderr);


Public API

execSh(command, [options], [callback])

Execute shell command forwarding all stdio.


  • command {String|Array} - The command to run, or array of commands
  • [options] {Object|TRUE} - Options object passed directly to child_process.spawn, when TRUE then { stdio: null } used
  • [callback] {Function} - callback(err, stdout, stderr)
  • err {Error|NULL} - Error object. Has code property containing last command exit code when available
  • stdout {String|NULL} - aggregated stdout or NULL if not available
  • stderr {String|NULL} - aggregated stderr or NULL if not available

Return Values:

Returns ChildProcess object.

Private API

Complete API Documentation including private and public methods is generated from source code by JSDoc tool and is available here.

Code Coverage

Code coverage report for all files is available here.


  • npm test - run tests
  • npm run jsdoc - build jsdoc
  • npm run dev - run tests continuously


The MIT License (MIT)


RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free