web-dev-qa-db-ja.com

キーボードではなくファイルからすべての入力を読み取るシェルスクリプトの自動化

キーボードから入力を受け取るシェルスクリプトがあるとします。すべての入力をファイルに書き込んでから、キーボードを使用する代わりに、そのファイルを使用してスクリプトへの入力を提供します。出来ますか?はいの場合はどうですか?前もって感謝します。

1
muntaj hossain

いつ

  • プログラムまたはスクリプトに必要な情報およびを正確に把握している
  • あなたは知っています情報が必要な順序および
  • あなたはまたあなたの端末からそれに入力を提供する必要はありません

...これは非常に簡単です。 input redirection を使用するだけでよく、入力リダイレクトの最も単純な形式で十分です。

./script < answers

./scriptを実際にプログラムまたはスクリプトを実行するコマンドに置き換え、answersをすべての入力を含むファイルへのパスに置き換えます。

(より便利であるとわかった場合は、< answers ./scriptと書くこともできます。どちらの場合も、answersの直前に<があります。--<answersと書くこともできます--_./scriptに渡す必要がある他のコマンドライン引数がある場合は問題ありません。)

これが機能する方法は、デフォルトでは 標準入力 が通常はターミナルですが、任意の ファイルまたはデバイス にリダイレクトできます。シェル演算子<は標準入力をリダイレクトします。詳細およびリダイレクトの詳細については、 Redirections を参照してください。


一方、プログラムまたはスクリプトが要求する情報がよくわからない場合は、尋ねられる場合とされない場合、または任意の順序で尋ねられる場合、あるいは重要なバリエーションを尋ねられます-次に、必要な入力の提供を処理する別のスクリプトを記述します。これを自動化するツールがあります。多くの場合、 expect が適切な選択です。しかし、あなたが言ったことから、あなたがこれを必要としているようには思えません。 (もしそうなら、あなたはもっと詳細を与えるべきです。)

1
Eliah Kagan

私は「ヒアストリング」があなたのためにこれを行うことができると信じています。使用法: command <<< $Word。そしてもちろん、各エントリは次のように別々の行になければなりません:

first variable
second variable
third variable 

そして、下記のサイトからの簡単な例:

# Instead of:
if echo "$VAR" | grep -q txt   # if [[ $VAR = *txt* ]]
# etc.

# Try:
if grep -q "txt" <<< "$VAR"
then   #         ^^^
   echo "$VAR contains the substring sequence \"txt\""
fi
# Thank you, Sebastian Kaminski, for the suggestion.

情報:

  • $Word:これは、コマンドに提供される情報を含むファイルです。この場合、コマンドを実行するために必要な値を含むファイルです。

参照: https://www.tldp.org/LDP/abs/html/x17837.html

0
George Udosen