grunt-bg-shell ============ Improve your workflow by running commands in the background and in parallel using [Grunt](https://github.com/gruntjs/grunt). ## Getting Started *Note: This plugin requires Grunt `>=0.4.0`* If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command: ```shell npm install grunt-bg-shell --save-dev ``` Then add the task to your `Gruntfile.js` with this line: ```js grunt.loadNpmTasks('grunt-bg-shell'); ``` ## Sample Usage For example, say you want to run your node server and also compile coffeescript and sass/scss files all in the same terminal. You could acheive that with the following config: ```javascript module.exports = function (grunt) { grunt.initConfig({ bgShell: { _defaults: { bg: true }, watchCompass: { cmd: 'compass watch' }, watchCoffee: { cmd: 'coffee --watch --output lib/ src/' }, runNode: { cmd: 'node server.js', bg: false } } }); grunt.registerTask('default', ['bgShell:watchCompass','bgShell:watchCoffee','bgShell:runNode']); }; ``` ## Available Options ```javascript bgShell: { lsTasks: { cmd: 'ls -la', // or function(){return 'ls -la'} execOpts: { cwd: './tasks' }, stdout: true, stderr: true, bg: false, fail: false, done: function(){} } } ``` * `cmd`: command to execute or `function(){}` that returns a command to execute * `execOpts`: options for [`child_process.exec`](http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback). If `execOpts.maxBuffer` set to `false`, `0`, `NaN` or `Infinite` it won't buffer stdout and stderr for `done` callback * `stdout`: `true`, `false` or `function(out){}` * `stderr`: `true`, `false` or `function(err){}` * `bg`: background execution * `fail`: fail grunt on error * `done`: callback after execution `function(err, stdout, stderr){}` ## Default Options ```javascript bgShell: { _defaults: { execOpts: {}, stdout: true, stderr: true, bg: false, fail: false, done: function (err, stdout, stderr) { } }, } ``` ## Troubleshooting If you get ``` Error: stdout maxBuffer exceeded ``` You should set `execOpts.maxBuffer` to `false`. But you won't get stdout and strerr in `done` callback Example: ```javascript bgShell: { lsTasks: { cmd: 'ls -la', execOpts: { maxBuffer: false }, stdout: function(chunk){ // process your stdout chunk }, stderr: function(chunk){ // process your stderr chunk }, done: function (err, stdout, stderr) { // stdout === null // stderr === null } } } ```