コマンドの質問に対する回答を準備する


14

1つのコマンドのみを実行するシェルスクリプトを作成するとします。ただし、このコマンドの設計は不十分です。コマンドラインオプションはありません。代わりに、いくつかの質問をし、ユーザーの入力を待ちます。

スクリプトでこの入力を準備する方法はありますか?質問は自動的に回答されますか?

回答:


16

コマンドがあまりうるさくない場合は、次のようなもので動作するはずです。

command > /dev/null << EOF
<answer 1>
<answer 2>
<answer 3>
EOF

これには、事前に正確な答えを知っている必要があります。


上記の回答を使用して、ラッピングスクリプトを設計できます。新しいスクリプトはパラメータをリッスンし、上記のメソッドで古いコマンドを呼び出す必要があります。
ウォルターA

またHERE文書として知られている、より多くの情報のために、あなたは試してみてください、ここでドキュメント定義ウィキペディア
OldTimer

15

Expectはそれを行うことができます。Expect Webサイトから:

Expectは、telnet、ftp、passwd、fsck、rlogin、tipなどの対話型アプリケーションを自動化するためのツールです。Expectは、このような作業を簡単にします。Expectは、これらの同じアプリケーションのテストにも役立ちます[...] "

autoexpectのような多くのヘルプが付属しています。

再びExpect Webサイトから、

autoexpectは、ユーザーが別のプログラムと対話するのを監視し、対話を再現するExpectスクリプトを作成します。定型スクリプトの場合、autoexpectは、手作業でスクリプトを記述するよりも大幅に時間を節約します。


ご回答ありがとうございます。私のニーズは非常に低いため、私の場合はExpectは過剰です。Bjornsは私のニーズに完全に応えます。しかし、より複雑なソリューションを必要としている他の人には答えを保管することをお勧めします。
tmuecksch

+1は、自動期待が存在することを知らなかったため、期待学習曲線があまりにも急すぎて気にしないと考えていたためです。もう一度見てみましょう。
ジョー

7

スクリプトが1つのプロンプトに答えるか、同じ答えを出すことができる複数のプロンプトを期待している場合、次のようになりますyes

NAME
       yes - output a string repeatedly until killed

SYNOPSIS
       yes [STRING]...
       yes OPTION

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or `y'.

次のように使用します。

yes Me | give_a_hug.sh

3
皮肉な用法しかし一般的にはありyes n、たとえば、:yes n | mv -i * somewhere/
サム・ワトキンス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.