140

通常はデフォルトのアクションでユーザーに表示されるプロンプトをbashスクリプトで自動的に処理することは可能ですか?現在、bashスクリプトを使用して、アクションを完了するためのプロンプト(Y / Nのプロンプト)をユーザーに表示する社内ツールを呼び出していますが、作成しているスクリプトは完全に「ハンドオフ」である必要があります。Y|Nプログラムの実行を継続できるように、プロンプトに送信する方法が必要です。これは可能ですか?

4

6 に答える 6

208

シンプルな

echo "Y Y N N Y N Y Y N" | ./your_script

これにより、「Y」または「N」の任意のシーケンスをスクリプトに渡すことができます。

于 2010-09-27T14:12:44.867 に答える
75

これは「オートコンプリート」ではなく、自動化です。これらの一般的なツールの1つは、Expectと呼ばれます。

からの入力をパイプするだけでうまくいくかもしれませんyes

于 2010-09-27T14:08:22.783 に答える
26

送信するYのみがある場合:

$> yes Y |./your_script

送信するNしかない場合:

$> yes N |./your_script
于 2016-11-16T10:23:58.873 に答える
22

入力を送信する最良の方法は、catとテキストファイルを使用して、必要な入力を渡すことです。

cat "input.txt" | ./Script.sh
于 2015-07-22T14:23:58.177 に答える
13

私の状況では、YまたはNを使用せずに、テキストまたは空白を使用していくつかの質問に答える必要がありました。私の状況でこれを行う最良の方法は、シェルスクリプトファイルを作成することでした。私の場合、それをautocomplete.shと呼びました

私はドクトリンスキーマエクスポーターに関するいくつかの質問に答える必要があったので、私のファイルは次のようになりました。

-これは単なる例です-

php vendor/bin/mysql-workbench-schema-export mysqlworkbenchfile.mwb ./doctrine << EOF
`#Export to Doctrine Annotation Format`                                     1
`#Would you like to change the setup configuration before exporting`        y
`#Log to console`                                                           y
`#Log file`                                                                 testing.log
`#Filename [%entity%.%extension%]`
`#Indentation [4]`
`#Use tabs [no]`
`#Eol delimeter (win, unix) [win]`
`#Backup existing file [yes]`
`#Add generator info as comment [yes]`
`#Skip plural name checking [no]`
`#Use logged storage [no]`
`#Sort tables and views [yes]`
`#Export only table categorized []`
`#Enhance many to many detection [yes]`
`#Skip many to many tables [yes]`
`#Bundle namespace []`
`#Entity namespace []`
`#Repository namespace []`
`#Use automatic repository [yes]`
`#Skip column with relation [no]`
`#Related var name format [%name%%related%]`
`#Nullable attribute (auto, always) [auto]`
`#Generated value strategy (auto, identity, sequence, table, none) [auto]`
`#Default cascade (persist, remove, detach, merge, all, refresh, ) [no]`
`#Use annotation prefix [ORM\]`
`#Skip getter and setter [no]`
`#Generate entity serialization [yes]`
`#Generate extendable entity [no]`                                          y
`#Quote identifier strategy (auto, always, none) [auto]`
`#Extends class []`
`#Property typehint [no]`
EOF

この戦略で私が気に入っているのは、回答が何であるかをコメントできることです。EOFを使用すると、空白行がそれだけになります(デフォルトの回答)。ちなみに、このエクスポーターツールにはこれらの質問に答えるための独自のJSONがありますが、これを行った後でわかりました=)。

スクリプトを実行するには、目的のディレクトリに移動し、ターミナルで実行'sh autocomplete.sh'します。

つまり、<< EOL&EOF をリターンラインと組み合わせて使用​​することで、必要に応じてプロンプトの各質問に答えることができます。 それぞれの新しい行は新しい答えです。

私の例は、`文字を使用したコメントでこれを行う方法を示しているので、各ステップが何であるかを覚えています。

この方法の他の利点は、YまたはNだけで答えることができることです...実際には、空白で答えることができます!

これが誰かを助けることを願っています。

于 2017-02-13T01:29:48.613 に答える
7

このための特別な組み込みユーティリティがあります-'はい'。

同じ答えですべての質問に答えるために、あなたは走ることができます

yes [answer] |./your_script

または、スクリプト内に配置して、各質問に対する具体的な回答を得ることができます

于 2018-11-25T07:02:09.360 に答える