Skip to content

Commit

Permalink
src: allow combination of -i and -e cli flags
Browse files Browse the repository at this point in the history
If both -i and -e flags are specified, do not ignore the -i. Instead,
launch the interactive REPL and start by evaluating the passed string.

Fixes: #1197
PR-URL: #5655
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
  • Loading branch information
Trott authored and evanlucas committed Mar 16, 2016
1 parent 8c4c84f commit 4ecd996
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/node.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,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]) {
Expand Down Expand Up @@ -161,6 +162,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');
Expand Down
27 changes: 27 additions & 0 deletions test/sequential/test-force-repl-with-eval.js
Original file line number Diff line number Diff line change
@@ -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);
});

0 comments on commit 4ecd996

Please sign in to comment.