web-dev-qa-db-ja.com

対話型プログラムに非対話的に引数を渡す

readコマンドを使用して、コマンドの引数を対話形式で(たとえば、yes/noオプションなど)読み取るbashスクリプトがあります。引数としてデフォルトのオプション値を渡す非対話型スクリプトでこのスクリプトを呼び出す方法はありますか?

対話型スクリプトに渡す必要があるのは、1つのオプションだけではありません。

94
sidharth sharma

より複雑なタスクには、expecthttp://en.wikipedia.org/wiki/Expect )があります。基本的にユーザーをシミュレートし、特定のプログラム出力や関連するものに反応する方法をスクリプトにコーディングできます。

これは、sshのような、パスワードのパイプを禁止する場合にも機能します。

37

たくさんの方法

入力をパイプする

echo "yes
no
maybe" | your_program

ファイルからリダイレクト

your_program < answers.txt

here document を使用します(非常に読みやすい場合があります)

your_program << ANSWERS
yes
no
maybe
ANSWERS

ここでは文字列 を使用します

your_program <<< $'yes\nno\nmaybe\n'
133
glenn jackman

データをファイルに入れて、次のようにリダイレクトできます。

$ cat file.sh
#!/bin/bash

read x
read y
echo $x
echo $y

スクリプトのデータ:

$ cat data.txt
2
3

スクリプトの実行:

$ file.sh < data.txt
2
3
13
Guru

もう1つ追加したいだけです。他の場所で見つけて、非常に簡単です。コマンド "execute_command"のコマンドラインですべてのプロンプトにyesを渡したい場合、単純にyesをパイプします。

yes | execute_command

これにより、すべてのyes/noプロンプトに対する答えとしてyesが使用されます。

6
user4516335