Passer des arguments à un programme interactif de manière non interactive
J'ai un script bash qui emploie le read
commande pour lire les arguments des commandes de manière interactive, par exemple oui/non options. Est-il un moyen pour appeler ce script dans un script non-interactif en passant par défaut les valeurs de l'option comme arguments?
Ce n'est pas seulement une option que j'ai à passer au script interactif.
- Si elle est la lecture de l'entrée standard stdin vous pourriez transférer dans votre entrée
- Comme cette question reçoit de nombreux doublons, il est intéressant de remarquer qu'il n'a pas d'importance dans la langue dans laquelle le programme interactif qui est écrit. Il pourrait être un programme C qui lit l'entrée standard, ou une Erlang application, ou quoi que ce soit. Il y a quelque chose qui s'exécute à partir de la ligne de commande et odieusement demandes interactif d'entrée, et que vous souhaitez automatiser.
- Bien sûr, si vous avez le contrôle sur l'odieux de l'application, de le réécrire afin qu'il puisse lire les réponses noninteractively (via un fichier de configuration, options de ligne de commande, ou quoi que ce soit). C'est beaucoup plus fiable et robuste contre la modification de l'ordre ou de la formulation de questions interactives.
Vous devez vous connecter pour publier un commentaire.
Pour les tâches plus complexes, il est
expect
( http://en.wikipedia.org/wiki/Expect ).Essentiellement, il simule un utilisateur, vous pouvez coder un script comment réagir à certains extrants du programme et les choses liées.
Cela fonctionne aussi dans des cas comme
ssh
qui interdit la tuyauterie de mots de passe pour elle.De nombreuses façons
tuyau de votre entrée
de redirection à partir d'un fichier
utiliser un ici le document (ce qui peut être très lisible)
utiliser un ici la chaîne
read
à saisir stdin, quelle fonction peut-on utiliser de faire ce que vous avez décrit?Vous pouvez mettre les données dans un fichier et re-direct comme ceci:
De données pour le script:
L'exécution du script:
Voulez juste ajouter une autre façon. Trouvé ailleurs, et est assez simple.
Dire que je veux passer oui pour tous les invites en ligne de commande pour une commande "execute_command", Alors je voudrais simplement pipe à oui.
Cela utiliser oui comme la réponse à tous oui/non invites.