admin管理员组

文章数量:1334924

I have this NodeJS script:

var util  = require('util'),
process = require('child_process'),
ls    = process.exec('test.sh');

ls.stdout.on('data', function (data) {
   console.log(data.toString());
   ls.stdin.write('Test');
});

and this shell script:

#!/bin/bash
echo "Please input your name:";
read name;                 
echo "Your name is $name";

I tried to run the NodeJS script and it stucked at "Please input your name:". Does anyone know how to send an input from NodeJS script to the shell script ?

Thanks

I have this NodeJS script:

var util  = require('util'),
process = require('child_process'),
ls    = process.exec('test.sh');

ls.stdout.on('data', function (data) {
   console.log(data.toString());
   ls.stdin.write('Test');
});

and this shell script:

#!/bin/bash
echo "Please input your name:";
read name;                 
echo "Your name is $name";

I tried to run the NodeJS script and it stucked at "Please input your name:". Does anyone know how to send an input from NodeJS script to the shell script ?

Thanks

Share Improve this question edited Apr 11, 2017 at 5:53 Rudy Lee asked Jun 25, 2014 at 12:50 Rudy LeeRudy Lee 4385 silver badges18 bronze badges 0
Add a ment  | 

2 Answers 2

Reset to default 5

You will have to say something like this:

ls.stdin.write('test\n');

OR

you can inherit standard streams if you want input from user using spawn.

like this:

var spawn = require('child_process').spawn;
spawn('sh',['test.sh'], { stdio: 'inherit' });

Did you try adding '\n' to the end of your input (e.g. ls.stdin.write('Test\n');) to simulate pressing return/enter?

Also, you want process.spawn, not process.exec. The latter does not have a streaming interface like you are using, but it instead executes the mand and buffers stdout and stderr output (passing it to the callback given to process.exec()).

本文标签: javascriptSend user input from NodeJS to shell scriptStack Overflow