IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Commande timeout + telnet + redirection ne fonctionne pas


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut Commande timeout + telnet + redirection ne fonctionne pas
    Bonjour à tous,

    Je réalise un script Bash et je voudrai que le contenu du telnet soit redirigé vers un fichier durant une durée définie.
    Le telnet pointe vers une machine qui émet des valeurs en continu.
    Ainsi je voudrai, pendant 6 secondes ici, avoir 6 secondes de valeurs dans mon fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    end=$((SECONDS+6))
     
    while [ $SECONDS -lt $end ]; do
      echo ecriture en cours dans fichier 1...
      timeout 6 telnet X.X.X.X YYYY>> Fichier1.txt
      echo FICHIER 1 FINI
      :
    done
    Le problème c'est que quand je fais ça, il ne m'écris que les 3 lignes
    Trying X.X.X.X...
    Connected to X.X.X.X.
    Escape character is '^]'.

    Quand je fais mon telnet @IP Port dans la console pas de problème, avec le timeout pas de problème.
    Quand je redirige le telnet, pas de problème.

    C'est donc quand je fais le telnet, le timeout ET la redirection qu'il ne me m'écris que les lignes de connexion.

    Si vous avez des pistes je suis preneur!

    Merci d'avance

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    Bonjour,

    qu'écrit telnet sur la console, sans la redirection ?

    la durée du script est aussi limitée à 6 secondes; change l'une des valeurs limite...

    EDIT: il faudrait aussi que tu expliques ce que tu veux faire avec telnet.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Merci d'avoir répondu!

    Le telnet affiche un flux de données provenant d'un Moxa. (Ce dernier reçoit les données venant de capteurs GPS)
    Sans redirection, le telnet écrit bien les données dans la console sans la redirection.

    Le telnet sert à faire le lien avec mon script et le Moxa et ainsi récupérer les données en temps réel.

    Ainsi, je pensais faire un
    timeout 6 telnet X.X.X.X YYYY>> Fichier1.txt
    Afin que durant 6 secondes, le telnet fonctionne et écrive dans 'Fichier1.txt"

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    C'est toujours un peu obscure. Tu as juste recopié ce que tu avais déjà dit.
    J'imagine que X.X.X.X est l'adresse IP et que YYYY est le port. Oui ? Alors il manque les commandes.
    En console, tu es un utilisateur qui ouvre une session telnet (et la ferme, n'est-ce pas ? ).
    Dans un script, tu ouvres une session utilisateur, alors qu'il n'y a pas d'utilisateur, et la seule chose qui empêche le script d'attendre à l'infini est que tu tues la tâche comme une grosse brutasse avec le timeout 6.

    On voudrait savoir ce que tu tapes dans ta session telnet en console, même si ce n'est que Ctrl+d.

    La solution peut être un here-document qui contient tes commandes telnet.

    Ou peut-être la commande expect.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Je vais tacher d'être plus clair!
    J'ai un moxa qui reçoit des valeurs toutes les secondes.
    Mon but est de récupérer ces valeurs.

    Ainsi, je fais un telnet sur l'adresse IP du Moxa avec un numéro de port dans ma console linux.
    Je vois bien apparaitre mon flux de données qui augmente chaque seconde.

    Alors par contre quand je lance la commande dans mon script ça fonctionne moins bien, je n'avais pas pensé à l'user.

    Dans le cas où je lance depuis la console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    timeout 6 telnet @Ip Port
    Concrètement, je ne tape rien dans ma session telnet, le flux de données est affiché durant 6 secondes dans la console et c'est tout, au bout de ces 6 secondes la commande se termine.

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    On avait compris la première fois, et la deuxième fois aussi. Ce n'est pas la peine de répéter 3 fois. Ni 4 ou plus, le cas échéant.

    Concrètement, je ne tape rien dans ma session telnet,
    c'est le problème.
    Enlève le timeout, et vérifie que tu ne sors jamais du script.

    Quand je fais mon telnet @IP Port dans la console pas de problème,
    Quand tu écris cela, tu ouvres bien une session telnet dans laquelle tu tapes quelque chose. Même si ce n'est que Ctrl+d. C'est ça que je demandais.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Enlève le timeout, et vérifie que tu ne sors jamais du script.
    Désolé mais je ne comprends pas

    Quand je lance mon script, avec juste comme commande 'telnet @IP Port', il tourne à l'infini dans la console, donc je ne sors pas du script à priori... Je ne comprends pas trop la "question"

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    il ne tourne pas à l'infini : il reste dans la boucle ouverte par la condition ($SECONDS -lt $end).
    et quand tu "interromps le script", en fait, c'est telnet qui est interrompu, et la boucle n'est pas reprise puisque la condition n'est plus remplie.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    end=$((SECONDS+5))
    while [ $SECONDS -lt $end ]; do
      telnet @Ip Port
      :
    done
    Je vois le telnet continuer à l'infini dans la console

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    oui, tu entres dans la boucle, parce que la condition est correcte, et
    quand tu "interromps le script", en fait, c'est telnet qui est interrompu, et la boucle n'est pas reprise puisque la condition n'est plus remplie.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    D'accord, mais du coup comment faire pour pouvoir faire un telnet pendant 6 secondes seulement?

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    en le mettant en arrière-plan :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    telnet ... >>fichier &
    sleep 6
    kill 2 $!
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    D'accord merci!
    Néanmoins quand je fais ça, la console me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Connection closed by foreign host.
    Dès que je mets & il me met ce message d'erreur

  14. #14
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    D'accord, mais du coup comment faire pour pouvoir faire un telnet pendant 6 secondes seulement?
    On utilise expect.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    On utilise expect.
    Je regarde ça oui. Par contre, une solution "plus classique" serait plus facile à mettre en place, sachant que 'expect' n'est pas installé sur mon linux et que les installations de paquets sont très bridées là où je travaille.

Discussions similaires

  1. La commande \href{Run:abc} ne fonctionne pas
    Par LeChi. dans le forum Beamer
    Réponses: 0
    Dernier message: 25/04/2009, 15h16
  2. [URL rewriting] la redirection ne fonctionne pas
    Par jobo13 dans le forum Apache
    Réponses: 2
    Dernier message: 08/03/2009, 18h51
  3. redirections ne fonctionne pas
    Par Invité dans le forum Langage
    Réponses: 4
    Dernier message: 22/09/2006, 10h05
  4. [CSV] Redirection ne fonctionne pas
    Par Brizzio dans le forum Langage
    Réponses: 12
    Dernier message: 16/12/2005, 10h55
  5. [DOS] Redirection ne fonctionne pas
    Par Pedro dans le forum Langage
    Réponses: 15
    Dernier message: 13/06/2005, 08h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo