2

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

ありがとうございました!

4

2 に答える 2

1

bashのmanページから:

read -p prompt

入力を読み取ろうとする前に、末尾の改行なしで標準エラーにプロンプ​​トを表示します。プロンプトは、入力が端末からのものである場合にのみ表示されます。

そして、node.jsには、スクリプトが入力を待機していることを検出する方法はないと思います。問題は、実際には、bashが非終端記号を検出し、標準エラーへの出力を無効にすることです。その場合でも、待機状態を検出するには、stdinではなくstderrから読み取る必要があります。

結局、Antoineが指摘したように、空のツールやExpectなどのツールを使用してシェルスクリプトをラップし、Bashをだましてターミナルにあると思わせる必要があるかもしれません。

ところで:proc.stdin.write("yes\n")正常に動作します。したがって、スクリプトを操作することはできますが、プロンプトが表示されず、スクリプトが実際に入力を読み取るタイミングproc.stderrがわかりません。スクリプトがまだステートメントにない場合でも、すぐに入力することもできます。スクリプトが入力を使い果たすまで、入力はバッファリングされます。proc.stdin.writeread -p

于 2012-12-19T11:06:58.590 に答える
1

"expect" http://en.wikipedia.org/wiki/Expectを使用しようとしましたか? これはテキストを「期待」するツールであり (正規表現を使用)、bash スクリプトが自動的に応答できます。

于 2012-12-18T23:23:16.397 に答える