Est-il possible qu'un script bash gère automatiquement les invites qui seraient normalement présentées à l'utilisateur avec des actions par défaut? Actuellement, j'utilise un script bash pour appeler un outil interne qui affiche des invites à l'utilisateur (demandant Y/N) pour effectuer des actions. Toutefois, le script que je suis en train d'écrire doit être complètement "passif", J'ai besoin d'un moyen d'envoyer Y|N
à l'invite pour permettre au programme de continuer à s'exécuter. Est-ce possible?
Un simple
echo "Y Y N N Y N Y Y N" | ./your_script
Cela vous permet de transmettre toute séquence "Y" ou "N" à votre script.
J'ai trouvé que le meilleur moyen d'envoyer des entrées est d'utiliser cat et un fichier texte pour transmettre toutes les entrées dont vous avez besoin.
cat "input.txt" | ./Script.sh
Si vous avez seulement Y pour envoyer:
$> yes Y |./your_script
Si vous avez seulement N à envoyer:
$> yes N |./yout_script
Dans ma situation, je devais répondre à certaines questions sans Y ou N mais avec du texte ou en blanc. J'ai trouvé que la meilleure façon de faire cela dans ma situation était de créer un fichier shellscript. Dans mon cas, je l'ai appelé autocomplete.sh
J'avais besoin de répondre à quelques questions pour un exportateur de schémas de doctrine et mon fichier ressemblait à ceci.
-- C'est seulement un exemple --
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
Ce que j’aime dans cette stratégie, c’est que vous pouvez commenter vos réponses et utiliser EOF une ligne vide, c’est cela (la réponse par défaut). En fait, cet outil d’exportateur a sa propre contrepartie JSON pour répondre à ces questions, mais j’ai compris cela après que j’ai fait cela =).
pour exécuter le script, il suffit de se trouver dans le répertoire de votre choix et d’exécuter 'sh autocomplete.sh'
dans le terminal.
En bref, en utilisant << EOL & EOF en combinaison avec Return Lines vous pouvez répondre à chaque question de l'invite si nécessaire. Chaque nouvelle ligne est une nouvelle réponse.
Mon exemple montre simplement comment cela peut être fait avec des commentaires utilisant également le caractère `afin que vous vous souveniez de chaque étape.
Notez que l'autre avantage de cette méthode est que vous pouvez répondre avec plus que juste Y ou N ... en fait, vous pouvez répondre avec des blancs!
J'espère que cela aide quelqu'un.
Il existe un utilitaire spécial pour cela - ' oui '.
Pour répondre à toutes les questions avec la même réponse, vous pouvez exécuter
yes [answer] |./your_script
Ou vous pouvez le mettre dans votre script avoir une réponse spécifique à chaque question