diff --git a/src/node.js b/src/node.js index a0f5aec86d..a24338b827 100644 --- a/src/node.js +++ b/src/node.js @@ -98,8 +98,9 @@ delete process.env.NODE_UNIQUE_ID; } - if (process._eval != null) { - // User passed '-e' or '--eval' arguments to Node. + if (process._eval != null && !process._forceRepl) { + // User passed '-e' or '--eval' arguments to Node without '-i' or + // '--interactive' startup.preloadModules(); evalScript('[eval]'); } else if (process.argv[1]) { @@ -171,6 +172,11 @@ process.exit(); }); }); + + if (process._eval != null) { + // User passed '-e' or '--eval' + evalScript('[eval]'); + } } else { // Read all of stdin - execute it. process.stdin.setEncoding('utf8'); diff --git a/test/sequential/test-force-repl-with-eval.js b/test/sequential/test-force-repl-with-eval.js new file mode 100644 index 0000000000..a285db8e57 --- /dev/null +++ b/test/sequential/test-force-repl-with-eval.js @@ -0,0 +1,27 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const spawn = require('child_process').spawn; + +// spawn a node child process in "interactive" mode (force the repl) and eval +const cp = spawn(process.execPath, ['-i', '-e', 'console.log("42")']); +var gotToEnd = false; +const timeoutId = setTimeout(function() { + throw new Error('timeout!'); +}, common.platformTimeout(1000)); // give node + the repl 1 second to boot up + +cp.stdout.setEncoding('utf8'); + +var output = ''; +cp.stdout.on('data', function(b) { + output += b; + if (output === '> 42\n') { + clearTimeout(timeoutId); + gotToEnd = true; + cp.kill(); + } +}); + +process.on('exit', function() { + assert(gotToEnd); +});