146

readコマンドを使用してコマンドの引数をインタラクティブに読み取るbashスクリプトがあります(例:yes / noオプション)。デフォルトのオプション値を引数として渡す非対話型スクリプトでこのスクリプトを呼び出す方法はありますか?

インタラクティブスクリプトに渡さなければならないのは、1つのオプションだけではありません。

4

5 に答える 5

177

たくさんの方法

入力をパイプします

echo "yes
no
maybe" | your_program

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

your_program < answers.txt

ヒアドキュメントを使用します(これは非常に読みやすい場合があります)

your_program << ANSWERS
yes
no
maybe
ANSWERS

here文字列を使用する

your_program <<< $'yes\nno\nmaybe\n'
于 2013-01-18T10:34:26.247 に答える
51

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

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

于 2013-01-18T10:56:39.773 に答える
15

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

$ cat file.sh
#!/bin/bash

read x
read y
echo $x
echo $y

スクリプトのデータ:

$ cat data.txt
2
3

スクリプトの実行:

$ file.sh < data.txt
2
3
于 2013-01-18T04:48:59.250 に答える
10

もう1つ追加したいだけです。他の場所でそれを見つけました、そして非常に簡単です。コマンド「execute_command」のコマンドラインですべてのプロンプトにyesを渡したいとすると、それから単にyesをパイプします。

yes | execute_command

これは、すべてのyes/noプロンプトへの回答としてyesを使用します。

于 2016-05-24T04:44:23.503 に答える
8

printfを使用して、入力をスクリプトにパイプすることもできます。

var=val
printf "yes\nno\nmaybe\n$var\n" | ./your_script.sh
于 2020-06-10T01:21:02.427 に答える