如何检测等待来自bash脚本的用户输入?

如何检测等待来自bash脚本的用户输入?,bash,node.js,Bash,Node.js,我的bash脚本如下所示: read -p "Do you wish to continue?" yn # further actions ... 我只想使用nodejs/child_进程与这个脚本交互。 如何检测它正在等待用户输入 var spawn = require('child_process').spawn; var proc = spawn('./script.sh'); proc.stdout.on("data", function(data) { console.log("

我的bash脚本如下所示:

read -p "Do you wish to continue?" yn
# further actions ...
我只想使用nodejs/child_进程与这个脚本交互。 如何检测它正在等待用户输入

var spawn = require('child_process').spawn;
var proc = spawn('./script.sh');
proc.stdout.on("data", function(data) {
  console.log("Data from bash");
}
proc.stdin.on("data", function(data) {
  console.log("Data from bash"); // doesn't work :/
}
谢谢大家!

你试过使用“expect”吗? 这是一个“期望”一些文本的工具(它使用正则表达式),bash脚本可以自动回答。

来自:

在标准错误上显示提示,不带尾随换行符,在 正在尝试读取任何输入。仅当输入被禁用时,才会显示提示 来自终端

我认为node.js中没有任何方法可以检测脚本是否正在等待输入。问题实际上是bash检测到一个非终端并禁用标准错误的输出。即使这样,您也必须读取stderr而不是stdin来检测任何等待状态

最后,正如Antoine所指出的,您可能必须使用诸如或之类的工具来包装shell脚本,并欺骗Bash使其认为它在终端中


顺便说一句:
proc.stdin.write(“yes\n”)
工作正常。因此,您可以使用脚本,但不会在
proc.stderr
上得到任何提示,也不知道脚本何时实际读取输入。您还可以立即
proc.stdin.write
输入,即使脚本尚未在
read-p
语句中。输入将被缓冲,直到脚本将其吃掉。

因此您不会看到“是否希望继续?”对,我不会看到此输出。谢谢!我不知怎么跳过了这个通知。
read -p prompt