1. exec-sh
Execute shell command forwarding all stdio.
exec-sh
Package: exec-sh
Created by: tsertkov
Last modified: Sat, 24 Jun 2023 02:18:03 GMT
Version: 0.4.0
License: MIT
Downloads: 22,716,648
Repository: https://github.com/tsertkov/exec-sh

Install

npm install exec-sh
yarn add exec-sh

exec-sh

NPM

NPM Downloads
Build Status
Coverage Status
David Status

Execute shell command forwarding all stdio streams.

Features

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)

Showcase

 // 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
/home
bash-3.2$ exit 99
exit
Exit code:  99

Usage

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

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

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

Promise Interface

 const 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);
}

run();

Public API

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

Execute shell command forwarding all stdio.

Parameters:

  • 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.

Scripts

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

License

The MIT License (MIT)

RELATED POST

10 Must-Know Windows Shortcuts That Will Save You Time

10 Must-Know Windows Shortcuts That Will Save You Time

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Arrays vs Linked Lists: Which is Better for Memory Management in Data Structures?

Navigating AWS Networking: Essential Hacks for Smooth Operation

Navigating AWS Networking: Essential Hacks for Smooth Operation

Achieving Stunning Visuals with Unity's Global Illumination

Achieving Stunning Visuals with Unity's Global Illumination

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code

Nim's Hidden Gems: Lesser-known Features for Writing Efficient Code