3

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

0

2 Answers 2

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' });
Sign up to request clarification or add additional context in comments.

2 Comments

cannot stress enough how thankful I am because of your response of 'inherit'... Thanks a lot
This answer with the stdio inheritance saved me from a 3 days headache, thank you!!
3

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 command and buffers stdout and stderr output (passing it to the callback given to process.exec()).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.