[英]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指出的那樣,您可能必須使用empty或Expect之類的工具來包裝您的shell腳本,並欺騙Bash認為它在終端中。
順便說一句: proc.stdin.write("yes\\n")
工作正常。 因此,您可以使用腳本,但不會在proc.stderr
上收到任何提示,並且不會知道腳本何時實際讀取輸入。 即使腳本尚未位於read -p
語句中,您也可以立即proc.stdin.write
輸入。 輸入被緩沖,直到腳本將其耗盡為止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.