2016-09-30 1 views
0

J'essaie d'exécuter un utilitaire (nco_confpack) qui fonctionne parfaitement bien lorsqu'il est utilisé directement sur la ligne de commande. Mais quand j'utilise le même utilitaire dans une boucle while dans un script shell, l'utilitaire entre en boucle infinie sans accepter aucune entrée. Comment éviter cette boucle infinie pour l'utilitaire? ci-dessous est l'extrait de code qui fonctionne très bienComment exécuter un utilitaire de demande d'entrée dans une boucle dans un script shell?

bash-3.2$ $OMNIHOME/bin/nco_confpack -import -server SERVERA -user root -password XXXXX-select Class.list -package Class.jar 
********************************************************************* 
*       W A R N I N G       * 
*                 * 
* This action may overwrite configuration currently in your system. * 
*                 * 
* It is recommended that a backup is made of the current data  * 
* before importing new data.          * 
*                 * 
********************************************************************* 
Do you want to continue (y/n) [N]? y 
bash-3.2$ 

Cependant, lorsque le même utilitaire est placé dans une boucle while la Voulez-vous continuer (y/n) message entre dans une boucle infinie sans accepter toute entrée

bash-3.2$ ./classInstall.sh 
Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? Do you want to continue (y/n) [N]? ^C 

Qu'est-ce que je fais mal ici? Est-ce que quelque chose ne va pas avec l'utilitaire ou dois-je mentionner explicitement quelque chose dans le script?

Le script contient la même commande juste qu'elle s'exécute sous une boucle while finie.

bash-3.2$vi classInstall.sh 
cat $1 | while read theLine 
do 
$OMNIHOME/bin/nco_confpack -import -server SERVERA -user root -password XXXXX-select Class.list -package Class.jar 
done 

1 $ contient deux entrées seulement pour la boucle, et la commande devrait fonctionner deux fois seulement

+0

La boucle se produit-elle automatiquement ou l'invite ne se répète-t-elle que lorsque vous appuyez sur entrer? –

+0

Il pourrait être utile de montrer le code en question. – chepner

+0

@NicolaiEhemann la boucle se produit automatiquement avant d'accepter quoi que ce soit de l'utilisateur/invite. –

Répondre

0

Je ne suis pas tout à fait sûr pourquoi la boucle while alimente votre utilitaire avec interlignes , mais vous pouvez résoudre le problème en envoyant le 'y' attendu à l'utilitaire vous-même:

cat $1 | while read theLine 
do 
    echo y | $OMNIHOME/bin/nco_confpack -import -server SERVERA -user root -password XXXXX-select Class.list -package Class.jar 
done 
+0

Merci qui a fonctionné .. Aussi, j'étais capable de rechercher une commande intégrée pour cela. 'chat $ 1 | alors lisez la ligne do /usr/bin/yes | $ OMNIHOME/bin/nco_confpack -import -server SERVERA -utilisateur -password XXXXX-select Class.list -package Class.jar done' Faites-moi savoir si cela fonctionne également pour vous. –