Essayez ceci :
echo -e "yes\nyes\nno" | /path/to/your/script
A partir du help echo
:
-e
:active l'interprétation des échappements antislash suivants
Acheminer vers l'entrée standard
Certains scripts peuvent prendre des réponses à partir de l'entrée standard. L'une des nombreuses façons de procéder serait :
$ printf "%s\n" yes yes no | ./foo.sh
yes yes no
Ceci est simple et facile à lire, mais dépend de la façon dont les composants internes de votre script gèrent l'entrée standard, et si vous ne pouvez pas modifier le script cible, cela peut parfois poser problème.
Utilisez Attendre pour les invites interactives
Bien que vous puissiez parfois vous en sortir en utilisant l'entrée standard, les invites interactives sont généralement mieux gérées par des outils comme Expect. Par exemple, étant donné un script foo.sh , vous pouvez écrire foo.exp pour l'automatiser.
Remarque :Vous pouvez également utiliser autoexpect pour créer un script à partir d'une session interactive, que vous pourrez ensuite modifier si nécessaire. Je le recommande vivement aux personnes qui découvrent Expect.
Script bash :foo.sh
C'est le script que vous voudrez peut-être automatiser.
#!/usr/bin/env bash
for question in Foo Bar Baz; do
read -p "${question}? "
replies=("${replies[@]}" "$REPLY")
done
echo "${replies[@]}"
Script attendu :foo.exp
Voici un script Expect simpliste pour automatiser le script Bash ci-dessus. Attendez-vous à ce que les boucles, les branchements et les expressions régulières puissent offrir beaucoup plus de flexibilité que cet exemple trop simplifié ne le montre, mais c'est le cas montrez à quel point un script Expect minimal peut être simple !
#!/usr/bin/env expect
spawn -noecho /tmp/foo.sh
expect "Foo? " { send -- "1\r" }
expect "Bar? " { send -- "2\r" }
expect "Baz? " { send -- "3\r" }
interact
Exemple de session interactive
Voici à quoi ressemblera votre session interactive lorsque vous exécuterez le script Expect. Il générera votre script Bash et répondra comme indiqué à chaque invite différente.
$ /tmp/foo.exp
Foo? 1
Bar? 2
Baz? 3
1 2 3