GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je répondre automatiquement aux invites d'un script Linux Bash ?

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

Linux
  1. Comment utiliser un mot de passe crypté dans le script Linux Bash Shell

  2. Comment créer un script d'une commande Linux

  3. Comment exécuter une commande Linux bash dans un script PERL ?

  4. Comment raccourcir l'invite Bash sous Linux ?

  5. Un script Bash peut-il être accroché à un fichier ?

Comment personnaliser l'invite Bash sous Linux

Comment exécuter un script bash

Comment ajouter un utilisateur Unix/linux dans un script bash ?

Comment diviser une chaîne dans un script bash

Comment puis-je lier symboliquement un fichier sous Linux?

Comment vérifier l'accès à Internet à l'aide du script bash sous Linux?