Skip to content

Commit db20ace

Browse files
committed
Switch to process.execPath over 'node'
1 parent cebcb6c commit db20ace

9 files changed

Lines changed: 27 additions & 31 deletions

File tree

scripts/run-tests.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var jsfiles = common.expand([pwd() + '/*.js',
2121
pwd() + '/src/*.js',
2222
pwd() + '/test/*.js'
2323
]).join(' ');
24-
if (exec('node ' + pwd() + '/' + JSHINT_BIN + ' ' + jsfiles).code !== 0) {
24+
if (exec(JSON.stringify(process.execPath)+' '+pwd()+'/'+JSHINT_BIN+' '+jsfiles).code !== 0) {
2525
failed = true;
2626
echo('*** JSHINT FAILED! (return code != 0)');
2727
echo();
@@ -36,7 +36,7 @@ if (exec('node ' + pwd() + '/' + JSHINT_BIN + ' ' + jsfiles).code !== 0) {
3636
cd(__dirname + '/../test');
3737
ls('*.js').forEach(function(file) {
3838
echo('Running test:', file);
39-
if (exec('node ' + file).code !== 123) { // 123 avoids false positives (e.g. premature exit)
39+
if (exec(JSON.stringify(process.execPath)+' '+file).code !== 123) { // 123 avoids false positives (e.g. premature exit)
4040
failed = true;
4141
echo('*** TEST FAILED! (missing exit code "123")');
4242
echo();

src/exec.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,7 @@ function execSync(cmd, opts, pipe) {
5858
if (fs.existsSync(stderrFile)) common.unlinkSync(stderrFile);
5959
if (fs.existsSync(codeFile)) common.unlinkSync(codeFile);
6060

61-
var execCommand = '"' +
62-
process.execPath.replace(/"/g, '\\"') +
63-
'" "' +
64-
scriptFile.replace(/"/g, '\\"') +
65-
'"';
61+
var execCommand = JSON.stringify(process.execPath) + ' ' + JSON.stringify(scriptFile);
6662
var script;
6763

6864
opts.cwd = path.resolve(opts.cwd);

test/config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ shell.mkdir('-p', 'tmp');
2828
var file = 'tmp/tempscript'+Math.random()+'.js',
2929
script = 'require(\'../../global.js\'); config.silent=true; config.fatal=false; cp("this_file_doesnt_exist", "."); echo("got here");';
3030
shell.ShellString(script).to(file);
31-
child.exec('node '+file, function(err, stdout) {
31+
child.exec(JSON.stringify(process.execPath)+' '+file, function(err, stdout) {
3232
assert.ok(stdout.match('got here'));
3333

3434
//
@@ -38,7 +38,7 @@ child.exec('node '+file, function(err, stdout) {
3838
var file = 'tmp/tempscript'+Math.random()+'.js',
3939
script = 'require(\'../../global.js\'); config.silent=true; config.fatal=true; cp("this_file_doesnt_exist", "."); echo("got here");';
4040
shell.ShellString(script).to(file);
41-
child.exec('node '+file, function(err, stdout) {
41+
child.exec(JSON.stringify(process.execPath)+' '+file, function(err, stdout) {
4242
assert.ok(!stdout.match('got here'));
4343

4444
shell.exit(123);

test/echo.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ shell.mkdir('-p', 'tmp');
2121
var file = 'tmp/tempscript'+Math.random()+'.js',
2222
script = 'require(\'../../global.js\'); echo("-asdf", "111");'; // test '-' bug (see issue #20)
2323
shell.ShellString(script).to(file);
24-
child.exec('node '+file, function(err, stdout) {
24+
child.exec(JSON.stringify(process.execPath)+' '+file, function(err, stdout) {
2525
assert.ok(stdout === '-asdf 111\n' || stdout === '-asdf 111\nundefined\n'); // 'undefined' for v0.4
2626

2727
// simple test with silent(true)
2828
shell.mkdir('-p', 'tmp');
2929
var file = 'tmp/tempscript'+Math.random()+'.js',
3030
script = 'require(\'../../global.js\'); config.silent=true; echo(555);';
3131
shell.ShellString(script).to(file);
32-
child.exec('node '+file, function(err, stdout) {
32+
child.exec(JSON.stringify(process.execPath)+' '+file, function(err, stdout) {
3333
assert.ok(stdout === '555\n' || stdout === '555\nundefined\n'); // 'undefined' for v0.4
3434

3535
theEnd();

test/exec.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -37,40 +37,40 @@ shell.config.fatal = old_fatal;
3737
//
3838

3939
// check if stdout goes to output
40-
var result = shell.exec('node -e \"console.log(1234);\"');
40+
var result = shell.exec(JSON.stringify(process.execPath)+' -e \"console.log(1234);\"');
4141
assert.equal(shell.error(), null);
4242
assert.equal(result.code, 0);
4343
assert.ok(result.stdout === '1234\n' || result.stdout === '1234\nundefined\n'); // 'undefined' for v0.4
4444

4545
// check if stderr goes to output
46-
var result = shell.exec('node -e \"console.error(1234);\"');
46+
var result = shell.exec(JSON.stringify(process.execPath)+' -e \"console.error(1234);\"');
4747
assert.equal(shell.error(), null);
4848
assert.equal(result.code, 0);
4949
assert.ok(result.stdout === '' || result.stdout === 'undefined\n'); // 'undefined' for v0.4
5050
assert.ok(result.stderr === '1234\n' || result.stderr === '1234\nundefined\n'); // 'undefined' for v0.4
5151

5252
// check if stdout + stderr go to output
53-
var result = shell.exec('node -e \"console.error(1234); console.log(666);\"');
53+
var result = shell.exec(JSON.stringify(process.execPath)+' -e \"console.error(1234); console.log(666);\"');
5454
assert.equal(shell.error(), null);
5555
assert.equal(result.code, 0);
5656
assert.ok(result.stdout === '666\n' || result.stdout === '666\nundefined\n'); // 'undefined' for v0.4
5757
assert.ok(result.stderr === '1234\n' || result.stderr === '1234\nundefined\n'); // 'undefined' for v0.4
5858

5959
// check exit code
60-
var result = shell.exec('node -e \"process.exit(12);\"');
60+
var result = shell.exec(JSON.stringify(process.execPath)+' -e \"process.exit(12);\"');
6161
assert.ok(shell.error());
6262
assert.equal(result.code, 12);
6363

6464
// interaction with cd
6565
shell.cd('resources/external');
66-
var result = shell.exec('node node_script.js');
66+
var result = shell.exec(JSON.stringify(process.execPath)+' node_script.js');
6767
assert.equal(shell.error(), null);
6868
assert.equal(result.code, 0);
6969
assert.equal(result.stdout, 'node_script_1234\n');
7070
shell.cd('../..');
7171

7272
// check quotes escaping
73-
var result = shell.exec( util.format('node -e "console.log(%s);"', "\\\"\\'+\\'_\\'+\\'\\\"") );
73+
var result = shell.exec( util.format(JSON.stringify(process.execPath)+' -e "console.log(%s);"', "\\\"\\'+\\'_\\'+\\'\\\"") );
7474
assert.equal(shell.error(), null);
7575
assert.equal(result.code, 0);
7676
assert.equal(result.stdout, "'+'_'+'\n");
@@ -93,11 +93,11 @@ if (process.version >= 'v0.11') { // this option doesn't work on v0.10
9393
}
9494

9595
// set timeout option
96-
result = shell.exec('node resources/exec/slow.js 100'); // default timeout is ok
96+
result = shell.exec(JSON.stringify(process.execPath)+' resources/exec/slow.js 100'); // default timeout is ok
9797
assert.ok(!shell.error());
9898
assert.equal(result.code, 0);
9999
if (process.version >= 'v0.11') { // this option doesn't work on v0.10
100-
result = shell.exec('node resources/exec/slow.js 100', {timeout: 10}); // times out
100+
result = shell.exec(JSON.stringify(process.execPath)+' resources/exec/slow.js 100', {timeout: 10}); // times out
101101
assert.ok(shell.error());
102102
}
103103

@@ -138,30 +138,30 @@ assert.strictEqual(result.toString(), result.stdout);
138138
//
139139

140140
// no callback
141-
var c = shell.exec('node -e \"console.log(1234)\"', {async:true});
141+
var c = shell.exec(JSON.stringify(process.execPath)+' -e \"console.log(1234)\"', {async:true});
142142
assert.equal(shell.error(), null);
143143
assert.ok('stdout' in c, 'async exec returns child process object');
144144

145145
//
146146
// callback as 2nd argument
147147
//
148-
shell.exec('node -e \"console.log(5678);\"', function(code, stdout, stderr) {
148+
shell.exec(JSON.stringify(process.execPath)+' -e \"console.log(5678);\"', function(code, stdout, stderr) {
149149
assert.equal(code, 0);
150150
assert.ok(stdout === '5678\n' || stdout === '5678\nundefined\n'); // 'undefined' for v0.4
151151
assert.ok(stderr === '' || stderr === 'undefined\n'); // 'undefined' for v0.4
152152

153153
//
154154
// callback as 3rd argument
155155
//
156-
shell.exec('node -e \"console.log(5566);\"', {async:true}, function(code, stdout, stderr) {
156+
shell.exec(JSON.stringify(process.execPath)+' -e \"console.log(5566);\"', {async:true}, function(code, stdout, stderr) {
157157
assert.equal(code, 0);
158158
assert.ok(stdout === '5566\n' || stdout === '5566\nundefined\n'); // 'undefined' for v0.4
159159
assert.ok(stderr === '' || stderr === 'undefined\n'); // 'undefined' for v0.4
160160

161161
//
162162
// callback as 3rd argument (slient:true)
163163
//
164-
shell.exec('node -e \"console.log(5678);\"', {silent:true}, function(code, stdout, stderr) {
164+
shell.exec(JSON.stringify(process.execPath)+' -e \"console.log(5678);\"', {silent:true}, function(code, stdout, stderr) {
165165
assert.equal(code, 0);
166166
assert.ok(stdout === '5678\n' || stdout === '5678\nundefined\n'); // 'undefined' for v0.4
167167
assert.ok(stderr === '' || stderr === 'undefined\n'); // 'undefined' for v0.4

test/make.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ var file = 'tmp/tempscript'+Math.random()+'.js',
1212
'}';
1313

1414
shell.ShellString(script).to(file);
15-
child.exec('node '+file, function(err, stdout) {
15+
child.exec(JSON.stringify(process.execPath)+' '+file, function(err, stdout) {
1616
assert.ok(stdout.match('first'));
1717
assert.ok(!stdout.match('second')); // Make should die on errors, so this should never get echoed
1818

test/set.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,35 +20,35 @@ assert.strictEqual(shell.config.noglob, false);
2020
shell.cp('-R', 'resources/', 'tmp');
2121

2222
// default behavior
23-
var result = shell.exec('node -e \"require(\'../global\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
23+
var result = shell.exec(JSON.stringify(process.execPath)+' -e \"require(\'../global\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
2424
assert.equal(result.code, 0);
2525
assert.equal(result.stdout, '1234\n');
2626
assert.equal(result.stderr, 'ls: no such file or directory: file_doesnt_exist\n');
2727

2828
// set -e
29-
var result = shell.exec('node -e \"require(\'../global\'); set(\'-e\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
29+
var result = shell.exec(JSON.stringify(process.execPath)+' -e \"require(\'../global\'); set(\'-e\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
3030
var nodeVersion = process.versions.node.split('.').map(function(str) { return parseInt(str, 10); });
3131
var uncaughtErrorExitCode = (nodeVersion[0] === 0 && nodeVersion[1] < 11) ? 8 : 1;
3232
assert.equal(result.code, uncaughtErrorExitCode);
3333
assert.equal(result.stdout, '');
3434
assert(result.stderr.indexOf('Error: ls: no such file or directory: file_doesnt_exist') >= 0);
3535

3636
// set -v
37-
var result = shell.exec('node -e \"require(\'../global\'); set(\'-v\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
37+
var result = shell.exec(JSON.stringify(process.execPath)+' -e \"require(\'../global\'); set(\'-v\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
3838
assert.equal(result.code, 0);
3939
assert.equal(result.stdout, '1234\n');
4040
assert.equal(result.stderr, 'ls file_doesnt_exist\nls: no such file or directory: file_doesnt_exist\necho 1234\n');
4141

4242
// set -ev
43-
var result = shell.exec('node -e \"require(\'../global\'); set(\'-ev\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
43+
var result = shell.exec(JSON.stringify(process.execPath)+' -e \"require(\'../global\'); set(\'-ev\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
4444
assert.equal(result.code, uncaughtErrorExitCode);
4545
assert.equal(result.stdout, '');
4646
assert(result.stderr.indexOf('Error: ls: no such file or directory: file_doesnt_exist') >= 0);
4747
assert(result.stderr.indexOf('ls file_doesnt_exist\n') >= 0);
4848
assert.equal(result.stderr.indexOf('echo 1234\n'), -1);
4949

5050
// set -e, set +e
51-
var result = shell.exec('node -e \"require(\'../global\'); set(\'-e\'); set(\'+e\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
51+
var result = shell.exec(JSON.stringify(process.execPath)+' -e \"require(\'../global\'); set(\'-e\'); set(\'+e\'); ls(\'file_doesnt_exist\'); echo(1234);\"');
5252
assert.equal(result.code, 0);
5353
assert.equal(result.stdout, '1234\n');
5454
assert.equal(result.stderr, 'ls: no such file or directory: file_doesnt_exist\n');

test/shjs.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ var assert = require('assert');
44

55
function runScript(name) {
66
// prefix with 'node ' for Windows, don't prefix for OSX/Linux
7-
var cmd = (process.platform === 'win32' ? 'node ' : '') + path.resolve(__dirname, '../bin/shjs');
7+
var cmd = (process.platform === 'win32' ? JSON.stringify(process.execPath)+ ' ' : '') + path.resolve(__dirname, '../bin/shjs');
88
var script = path.resolve(__dirname, 'resources', 'shjs', name);
99
return shell.exec(cmd + ' ' + script, { silent: true });
1010
}

test/touch.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ assert.ok(shell.error());
4949
var testFile = tmpFile(false);
5050
var testFile2 = tmpFile();
5151
shell.touch(testFile2);
52-
shell.exec('node resources/exec/slow.js 3000');
52+
shell.exec(JSON.stringify(process.execPath)+' resources/exec/slow.js 3000');
5353
shell.touch(testFile);
5454
assert.ok(!shell.error());
5555
assert.notEqual(fs.statSync(testFile).mtime.getTime(), fs.statSync(testFile2).mtime.getTime());

0 commit comments

Comments
 (0)