web-dev-qa-db-fra.com

Passer des arguments à un programme interactif de manière non interactive

J'ai un script bash qui utilise la commande read pour lire les arguments des commandes de manière interactive, par exemple les options oui/non. Existe-t-il un moyen d'appeler ce script dans un script non interactif en passant les valeurs d'option par défaut comme arguments?

Ce n'est pas seulement une option que je dois passer au script interactif.

94
sidharth sharma

Pour les tâches plus complexes, il existe expect ( http://en.wikipedia.org/wiki/Expect ). Il simule fondamentalement un utilisateur, vous pouvez coder un script comment réagir à des sorties de programme spécifiques et à des choses connexes.

Cela fonctionne également dans des cas comme ssh qui interdit de lui attribuer des mots de passe.

37
Dani Gehtdichnixan

Plusieurs façons

dirigez votre entrée

echo "yes
no
maybe" | your_program

rediriger depuis un fichier

your_program < answers.txt

utilisez un ici document (cela peut être très lisible)

your_program << ANSWERS
yes
no
maybe
ANSWERS

utilisez un ici chaîne

your_program <<< $'yes\nno\nmaybe\n'
133
glenn jackman

Vous pouvez mettre les données dans un fichier et le rediriger comme ceci:

$ cat file.sh
#!/bin/bash

read x
read y
echo $x
echo $y

Données pour le script:

$ cat data.txt
2
3

Exécuter le script:

$ file.sh < data.txt
2
3
13
Guru

Je veux juste ajouter un autre moyen. Trouvé ailleurs, et est assez simple. Dites que je veux passer oui pour toutes les invites en ligne de commande pour une commande "execute_command", puis je lui acheminerais simplement oui.

yes | execute_command

Ceci utilisera oui comme réponse à toutes les invites oui/non.

6
user4516335