簡體   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