これを試してください:
echo -e "yes\nyes\nno" | /path/to/your/script
help echo
から :
-e
:次のバックスラッシュ エスケープの解釈を有効にします
標準入力へのパイプh2>
一部のスクリプトは、標準入力から応答を受け取ることができます。これを行う多くの方法の 1 つ:
$ printf "%s\n" yes yes no | ./foo.sh
yes yes no
これはシンプルで読みやすいですが、スクリプトの内部で標準入力がどのように処理されるかに依存し、ターゲット スクリプトを編集できない場合は問題になることがあります。
インタラクティブ プロンプトに Expect を使用する
標準入力を使用して回避できる場合もありますが、対話型のプロンプトは一般に、Expect などのツールで処理する方が適切です。たとえば、foo.sh というスクリプトがあるとします。 、foo.exp と書くことができます それを自動化します。
注:autoexpect も使用できます 対話型セッションからスクリプトを作成し、必要に応じて編集できます。 Expect を初めて使用する人には、これを強くお勧めします。
Bash スクリプト:foo.sh
これは、自動化したいスクリプトです。
#!/usr/bin/env bash
for question in Foo Bar Baz; do
read -p "${question}? "
replies=("${replies[@]}" "$REPLY")
done
echo "${replies[@]}"
Expect スクリプト:foo.exp
上記の Bash スクリプトを自動化する単純な Expect スクリプトを次に示します。ループ、分岐、および正規表現を期待すると、この非常に単純化された例が示すよりもはるかに柔軟になりますが、実際に 最小限の Expect スクリプトがいかに簡単かを示してください!
#!/usr/bin/env expect
spawn -noecho /tmp/foo.sh
expect "Foo? " { send -- "1\r" }
expect "Bar? " { send -- "2\r" }
expect "Baz? " { send -- "3\r" }
interact
インタラクティブ セッションの例
これは、Expect スクリプトを実行したときのインタラクティブ セッションの様子です。これは Bash スクリプトを生成し、それぞれのプロンプトに対して指示どおりに応答します。
$ /tmp/foo.exp
Foo? 1
Bar? 2
Baz? 3
1 2 3