2008-12-30 9 views
11

J'ai un script qui appelle une application qui nécessite une entrée de l'utilisateur, par ex. exécuter l'application qui nécessite que l'utilisateur tape "Y" ou "N".
Comment puis-je obtenir le script shell ne pas demander à l'utilisateur pour l'entrée, mais plutôt utiliser la valeur d'une variable prédéfinie dans le script?Entrée à partir du script shell

Dans mon cas, il y aura deux questions qui nécessitent une entrée.

Répondre

14

Vous pouvez diriger n'importe quel texte sur stdin et ce sera comme si l'utilisateur le tapait lui-même. Par exemple, pour simuler la saisie « Y » il suffit d'utiliser:

echo "Y" | myapp 

ou en utilisant une variable shell:

echo $ANSWER | myapp 

Il y a aussi une commande unix appelée « oui » qui délivre un flux continu de « y » pour les applications qui demandent beaucoup de questions auxquelles vous voulez simplement répondre par l'affirmative.

+0

L'écho est ce dont j'ai besoin mais avec plusieurs paramètres ... –

+3

Dans ce cas, essayez d'utiliser la commande "printf" plutôt que echo, et incluez les nouvelles lignes dans la chaîne. Donc, si vous voulez répondre "Y" alors "N" utilisez: printf "Y \ nN \ n" | myapp –

2

la commande expect pour les situations plus compliquées, vous devriez l'avoir. Je ne m'en suis pas beaucoup servi, mais je suppose que c'est ce que vous cherchez.

$ man expect 

http://oreilly.com/catalog/expect/chapter/ch03.html

+0

Ne semble pas avoir «attendre» ici - en cours d'exécution sur HPUX11 –

+0

Installez-le. attendre est un outil inestimable. – PEZ

2

Si l'application STDIN (par opposition à/dev/tty, comme par exemple le programme passwd fait), puis est entrée multiligne le candidat idéal pour un ici-document. Comme vous pouvez le constater, les documents ici permettent même la substitution de paramètres. Si vous ne le souhaitez pas, utilisez <<'EOF'.

+1

Upvote pour la solution multiligne – Pankrates

0

Je préfère la façon suivante: Si vous voulez plusieurs entrées ... vous mettez dans plusieurs déclarations d'écho comme si:

{ echo Y; Y; } | sh install.sh >> install.out 

Dans l'exemple ci-dessus ... Je suis l'alimentation de deux entrées dans le install.sh scénario. Puis ... à la fin, je redirige la sortie du script vers un fichier journal à archiver et à visualiser plus tard.