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.
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
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.
Via npm:
$ npm install [-g] shelljsIf 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_scriptrequire('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);
}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');