通常、デフォルトのアクションでユーザーに表示されるプロンプトをbashスクリプトで自動的に処理することは可能ですか?現在、bashスクリプトを使用してユーザーにプロンプトを表示する社内ツールを呼び出し(Y/Nを要求)、アクションを完了する必要がありますが、記述しているスクリプトは完全に「ハンドオフ」である必要があります。プログラムが実行を継続できるように、Y|N
をプロンプトに送信する方法が必要です。これは可能ですか?
シンプルな
echo "Y Y N N Y N Y Y N" | ./your_script
これにより、「Y」または「N」のシーケンスをスクリプトに渡すことができます。
入力を送信する最良の方法は、catとテキストファイルを使用して、必要な入力を渡すことです。
cat "input.txt" | ./Script.sh
送信するYのみがある場合:
$> yes Y |./your_script
送信するNのみがある場合:
$> yes N |./yout_script
私の状況では、YまたはNなしで、テキストまたは空白でいくつかの質問に答える必要がありました。私の状況でこれを行う最良の方法は、シェルスクリプトファイルを作成することでした。私の場合、autocomplete.shと呼びました。
doctrineスキーマエクスポーターに関するいくつかの質問に答える必要があったため、ファイルは次のようになりました。
-これは単なる例です-
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&EOFReturn Linesと組み合わせてを使用すると、必要に応じてプロンプトの各質問に答えることができます。 それぞれの新しい行は新しい答えです。
私の例は、コメントを使用してこれを行う方法を示しています。また、 `文字を使用して、各ステップが何であるかを覚えています
この方法のもう1つの利点は、YまたはNだけで答えることができることに注意してください...実際には、空白で答えることができます!
これが誰かを助けることを願っています。
このための特別な組み込みユーティリティがあります-' yes '。
同じ答えですべての質問に答えるには、次を実行できます。
yes [answer] |./your_script
または、スクリプトに入れて、各質問に具体的な答えを付けることができます