繁体   English   中英

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

[英]How to detect on waiting for user input from bash script?

我的bash脚本如下所示:

read -p "Do you wish to continue?" yn
# further actions ...

我只想使用nodejs / child_process与该脚本进行交互。 如何检测到它正在等待用户输入?

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 :/
}

谢谢!

您是否尝试过使用“期望” http://en.wikipedia.org/wiki/期望? 这是一个“期望”某些文本的工具(它使用正则表达式),bash脚本可以自动应答。

bash手册页中

 read -p prompt 

在尝试读取任何输入之前,显示标准错误提示,不带换行符。 仅当输入来自终端时才显示提示。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM