Skip to content

Latest commit

 

History

History
 
 

README.md

ShellJS

Unix shell commands for Node.js

Join the chat at https://gitter.im/shelljs/shelljs Build Status Build status

ShellJS is a portable (Windows/Linux/OS X) implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts!

ShellJS supports node v0.11, v0.12, v4, v5, v6, and all releases of iojs.

The project is unit-tested and battled-tested in projects like:

  • PDF.js - Firefox's next-gen PDF reader
  • Firebug - Firefox's infamous debugger
  • JSHint - Most popular JavaScript linter
  • Zepto - jQuery-compatible JavaScript library for modern browsers
  • Yeoman - Web application stack and development tool
  • Deployd.com - Open source PaaS for quick API backend generation
  • And many more.

If you have feedback, suggestions, or need help, feel free to post in our issue tracker.

Think ShellJS is cool? Check out some related projects (like cash--a javascript-based POSIX shell) in our Wiki page!

Upgrading from an older version? Check out our breaking changes page to see what changes to watch out for while upgrading.

Command line use

If you just want cross platform UNIX commands, checkout our new project shelljs/shx, a utility to expose shelljs to the command line.

For example:

$ shx mkdir -p foo
$ shx touch foo/bar.txt
$ shx rm -rf foo

A quick note about the docs

For documentation on all the latest features, check out our README. To read docs that are consistent with the latest release, check out the npm page or shelljs.org.

Installing

Via npm:

$ npm install [-g] shelljs

If the global option -g is specified, the binary shjs will be installed. This makes it possible to run ShellJS scripts much like any shell script from the command line, i.e. without requiring a node_modules folder:

$ shjs my_script

Examples

JavaScript

require('shelljs/global');

if (!which('git')) {
  echo('Sorry, this script requires git');
  exit(1);
}

// Copy files to release dir
rm('-rf', 'out/Release');
cp('-R', 'stuff/', 'out/Release');

// Replace macros in each .js file
cd('lib');
ls('*.js').forEach(function(file) {
  sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
  sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file);
  sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file);
});
cd('..');

// Run external tool synchronously
if (exec('git commit -am "Auto-commit"').code !== 0) {
  echo('Error: Git commit failed');
  exit(1);
}

Global vs. Local

The example above uses the convenience script shelljs/global to reduce verbosity. If polluting your global namespace is not desirable, simply require shelljs.

Example:

var $ = require('shelljs');
$.echo('hello world');