diff --git a/doc/api.markdown b/doc/api.markdown index 403bc66d77f..4e7b011df68 100644 --- a/doc/api.markdown +++ b/doc/api.markdown @@ -1054,6 +1054,7 @@ There is a second optional argument to specify several options. The default opti , timeout: 0 , maxBuffer: 200*1024 , killSignal: 'SIGKILL' + , cwd: null , env: null } diff --git a/lib/child_process.js b/lib/child_process.js index 54bb6671c10..d19a0c01198 100644 --- a/lib/child_process.js +++ b/lib/child_process.js @@ -28,6 +28,7 @@ exports.execFile = function (file /* args, options, callback */) { , timeout: 0 , maxBuffer: 200*1024 , killSignal: 'SIGKILL' + , cwd: null , env: null }; var args, optionArg, callback; @@ -55,7 +56,7 @@ exports.execFile = function (file /* args, options, callback */) { } } - var child = spawn(file, args, {env: options.env}); + var child = spawn(file, args, {cwd: options.cwd, env: options.env}); var stdout = ""; var stderr = ""; var killed = false; diff --git a/test/simple/test-child-process-exec-cwd.js b/test/simple/test-child-process-exec-cwd.js new file mode 100644 index 00000000000..20d73b2e3f8 --- /dev/null +++ b/test/simple/test-child-process-exec-cwd.js @@ -0,0 +1,24 @@ +require('../common'); +var assert = require('assert'); +var exec = require('child_process').exec; + +var success_count = 0; +var error_count = 0; + +child = exec('pwd', {cwd: "/dev"}, function (err, stdout, stderr) { + if (err) { + error_count++; + console.log('error!: ' + err.code); + console.log('stdout: ' + JSON.stringify(stdout)); + console.log('stderr: ' + JSON.stringify(stderr)); + assert.equal(false, err.killed); + } else { + success_count++; + assert.equal(true, /^\/dev\b/.test(stdout)); + } +}); + +process.addListener('exit', function () { + assert.equal(1, success_count); + assert.equal(0, error_count); +}); \ No newline at end of file