passthru
Version:
Spawns a child process attached to parent's stdin, stdout and stderr. Inspired by PHP's passthru().
61 lines (47 loc) • 1.32 kB
JavaScript
var util = require('util'),
spawn = require('child_process').spawn;
module.exports = function(command, options, callback) {
// passthru(command, callback)
if (typeof options == 'function') {
callback = options;
options = {};
}
// passthru(command)
if (typeof options == 'undefined') {
options = {};
}
// passthru("ls -la /tmp") => passthru(["ls", "-la", "/tmp"])
if (typeof command == 'string') {
command = command.split(' ');
}
if (!options.cwd) {
options.cwd = process.cwd();
}
if (!options.env) {
options.env = process.env;
}
if (!options.stdio) {
options.stdio = 'inherit';
}
// command = "ls"
// args = ["-la", "/tmp"]
var args = command;
command = args.shift();
var child = spawn(command, args, options);
child.on('exit', function(code, signal) {
if (!callback) {
return;
}
if (code !== 0) {
var msg = 'Process exit with code ' + code;
if (signal) {
msg += ' and signal ' + signal;
}
var error = new Error(msg);
error.code = code;
error.signal = signal;
return callback(error);
}
callback();
});
};