180 votes

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

J'ai un script bash qui emploie le 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 des options par défaut comme arguments ?

Il ne s'agit pas seulement d'une option que je dois passer au script interactif.

213voto

glenn jackman Points 69748

De nombreuses façons

pipe votre contribution

echo "yes
no
maybe" | your_program

rediriger à partir d'un fichier

your_program < answers.txt

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

your_program << ANSWERS
yes
no
maybe
ANSWERS

utiliser un ici la chaîne

your_program <<< $'yes\nno\nmaybe\n'

66voto

Dani Gehtdichnixan Points 1083

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

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

20voto

Guru Points 7050

Vous pouvez mettre les données dans un fichier et les 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écution du script :

$ file.sh < data.txt
2
3

18voto

Je veux juste ajouter un autre moyen. Je l'ai trouvé ailleurs, et c'est assez simple. Disons que je veux passer oui pour toutes les invites à la ligne de commande pour une commande "execute_command", alors je voudrais simplement pipe oui à elle.

yes | execute_command

La réponse à toutes les questions de type "oui/non" est alors "oui".

11voto

spanchan Points 41

Vous pouvez également utiliser printf pour diriger l'entrée vers votre script.

var=val
printf "yes\nno\nmaybe\n$var\n" | ./your_script.sh

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X