将用户输入从NodeJS发送到shell脚本

时间:2014-06-25 12:50:04

标签: javascript node.js shell

我有这个NodeJS脚本:

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');
});

和这个shell脚本:

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

我试图运行NodeJS脚本并且它停留在"请输入您的姓名:"。有谁知道如何将NodeJS脚本的输入发送到shell脚本?

谢谢

2 个答案:

答案 0 :(得分:2)

您是否尝试在输入结尾添加'\n'(例如ls.stdin.write('Test\n');)以模拟按返回/输入?

此外,您需要process.spawn,而不是process.exec。后者没有像你正在使用的流式界面,而是执行命令并缓冲stdout和stderr输出(将其传递给process.exec()的回调)。

答案 1 :(得分:1)

你必须这样说:

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

OR

如果您希望使用spawn的用户输入,则可以继承标准流。

像这样:

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