8
votes

Comment savoir s'attendre à ce que j'ai terminé le mode interactif?

J'écris quelques-uns d'autres commandes à Bash.

script: xxx

Mes intentions avec le script sont, laissez-la d'abord telnet dans une machine, quand il voit une invite1, laissez-le me donner le contrôle, je vais exécuter une commande de chargement d'une image spécifique. Attendez ensuite que Invest2 apparaisse (ce qui indique que l'image a été chargée). Puis laissez-le exécuter l'autre ensemble de commandes.

Après avoir exécuté le script, je pourrais entrer dans le mode interactif, charger mon image. Le problème est de sortir du mode interactif sur la machine distante et de le redonner le contrôle.

L'erreur que j'ai obtenue: xxx

Comment puis-je faire cela?


2 commentaires

Comment comptez-vous quitter le mode interactif? Est-ce en attendant une invite ?


La valeur du délai d'attente de 20, je suppose que je vais me sortir. Est-ce que je me trompe ici? Une fois que je suis sorti, je veux m'attendre à prendre le contrôle et qu'attendez-vous pour inviter. Ensuite, il peut exécuter l'ensemble des commandes de FRTER.


3 Réponses :


8
votes

Votre problème est deux fois ...

  1. Vous devez interagir avec un explicite , et donnez-lui un moyen de savoir que vous avez publié le contrôle ... Dans ce cas, j'utilise trois signes plus et appuyez sur Entrée. < / p>

  2. Après votre contrôle de retour, le script devra à nouveau obtenir l'invite, ce qui signifie que la première chose que vous faites après le contrôle de la commande à l'attente est d'envoyer un autre \ r . J'ai édité de ce que je pense que vous essayez de faire ...

    Exemple suit ... xxx


0 commentaires

0
votes

Merci Mike pour cette suggestion. Je l'ai modifié un peu et je l'ai adapté à mon problème.

Changement de code: xxx

La valeur Timetout 10 n'est pas liée au délai d'expiration défini -1 / Code> Nous avons défini initialement. Par conséquent, je peux exécuter les commandes que je veux sur inviter1 et une fois que le clavier est inactif pendant 10 secondes, puis le script gagne le contrôle.

Même après cela, j'ai fait face à un autre problème, après Inviter1 , je voulais exécuter la commande pour charger une image particulière. Le chargement de l'image prend environ 2 minutes. Même avec SET Timeout -1 Le script chronométrant en attente de invite2 . Ce n'est pas le délit Telnet, même, que j'ai vérifié. Mais la solution pour cela est l'ajout exp_continue en cas de délai d'attente dans la déclaration d'attente.

Pour votre SET Timeout -1 Pour prendre en compte, il doit être placé avant la commande Suppy Telnet dans l'attente.


0 commentaires

1
votes

retour = échec

retour n'a pas fonctionné pour moi car dans mon cas, ce n'était pas une coquille qui peut simplement m'empeller à nouveau avec la même question. Je ne pouvais pas comprendre comment l'obtenir pour correspondre à ce qui a été imprimé avant que je n'ai fait retour .

attendre (pour fixer la solution ci-dessus) = échouer

Le manuel dit: xxx

mais je ne pouvais pas obtenir que cela fonctionne (sauf où je l'ai utilisé ci-dessous, combiné avec -Indices qui fait Il fonctionne là-bas et aucune idée de la façon de le faire fonctionner pour obtenir une sortie précédente introduite dans un nouveau attendre {...} bloc.)

attendre

Et la solution ici en utilisant attendre n'a pas fonctionné pour moi non plus parce qu'il n'avait aucune explication et n'a pas été utilisé comme je voulais, je ne savais donc pas comment appliquer cet exemple limité dans mon fichier d'attendu réel.

ma solution

alors ce que j'ai fait à la place. Mode interactif et ont simplement un moyen de fournir une entrée, une ligne à la fois. Cela fonctionne même pour les touches fléchées et alt + ... , (dans les questions de dialogue DPKG) mais pas pour simplement Parfois (appuyez sur Alt + Y pour < Oui> ou alt + o pour pour ceux de la boîte de dialogue DPKG). (Tout le monde sait comment envoyer une entrée? pas '\ n', mais la touche Entrée comme la boîte de dialogue DPKG veut?)

Le -I $ user_spawne_id se trouve au lieu de seulement En regardant votre processus de génie, il examine également ce que les types d'utilisateurs. Cela affecte tout ce qui précède, vous utilisez donc attendu_after ou le mettre sous le reste, pas attendu_before . -Indices permet de lire la partie capturée de l'expression régulière correspondant. attendre (1, chaîne) est la partie que je voulais (tout sauf le côlon). xxx

Utilisation de attendu_after Il s'appliquera à tous les éléments suivants Attendez-vous jusqu'au prochain attendu_after . Vous pouvez donc mettre cela n'importe où au-dessus de vos lignes habituelles Attendez-vous dans le fichier.

et mon cas / but

Je voulais automatiser la mise à niveau de do-abandon qui ne supporte pas correctement les drapeaux non interactifs habituels de Debian (voir ici ) ... il est juste suspendu et ignore la saisie à la place. de poursuivre après une question. Mais les questions sont imprévisibles ... et une mise à niveau abandonnée signifie que vous pouvez gâcher votre système, de sorte que des retombées à l'interaction sont nécessaires.


0 commentaires