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 :

Transfert de fichier


Sujet :

Shell et commandes GNU

  1. #1
    Invité
    Invité(e)
    Par défaut Transfert de fichier
    Bonjour,

    J'ai un petit souci avec un transfert de fichier automatique que je fais via la commande scp.
    Dans un fichier sh, je fais des opérations sur un serveur à distance, une fois ces opérations terminée, je fais transférer mon répertoire de travail sur une machine locale en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    expect - <<ENDSCRIPT
      set timeout -1
      spawn scp -r $SIM_NAME $DESTINATION
      expect {
           "*password:*"
           {
              send "MDP"
              exp_continue
          }
      }
    ENDSCRIPT
    Y a-t-il un moyen simple de vérifier que le répertoire est bien copié à la suite de ce transfert ? ou alors, je dois avec des lignes de commande supplémentaires?

    Merci de votre aide
    Bonne aprem
    Dernière modification par al1_24 ; 06/08/2013 à 17h33. Motif: Balises [Code], grammaire, orthographe

  2. #2
    Invité
    Invité(e)
    Par défaut
    Re,

    Bon j'ai finalement décider de coder quelque chose vu que je n'ai pas trouvé de solutions. J'ai fait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    expect - <<ENDSCRIPT
      set timeout -1
      spawn scp -r $SIM_NAME $DESTINATION
      expect {
           "*password:*"
           {
              send "MDP\r"
              exp_continue
          }
      }
      TEST=$(echo $?)
    ENDSCRIPT
     
    if [ $TEST -eq 0 ]
       then
         rm -r $SIM_NAME
       else
         cp -r $SIM_NAME /space/user/Simulation_Recuperation/
         DESTINATION_ERROR=1
    fi
    Je me suis rendu compte que comme je l'ai écrite, la fonction echo me donne le return code du expect. Mais en le positionnant à d'autres endroits, je n'arrive jamais à avoir le return code de la commande scp.
    Est ce que quelqu'un pourrait m'éclairer un peu svp?

    Merci et bonne aprem

    Edit: J'ai oublié d'expliquer ce que je voulais faire exactement. Dans le cas où mon tranfert marche, on supprime le dossier. Sinon on le copie ailleurs et on met la variable DESTINATION_ERROR à 1 pour ensuite m'envoyer un mail d'alerte (la partie du mail marche donc je l'ai pas mise)
    Dernière modification par Invité ; 06/08/2013 à 20h09.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    mais pourquoi utiliser expect ?
    pourquoi ne pas configurer le serveur pour utiliser l'identification par clé publique ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'y ai aussi pensé, pas pour certaines raisons, on ne peut pas utiliser les clés là où je suis.
    Une autre idée?

    Merci pour le coup de main

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    En vérifiant le code de retour de scp, il se peut qu'il indique s'il a réussi, ou non.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Effectivement, ce matin, j'ai vu cette solution trainer sur internet. J'essaie désespérément de la mettre en place à parti de cet exemple qui correspond exactement au mien mais c'est sans résultat. Voici comment je l'ai modifiée dernièrement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    expect - <<ENDSCRIPT
      set timeout -1
      spawn scp -r $SIM_NAME $DESTINATION
      expect {
           "*password:*"
           {
              send "MDP\r"
              exp_continue
          }
      }
      catch wait REASON
      set STATUS [ lindex $REASON 3 ]
    ENDSCRIPT
     
    echo $STATUS > test_file
    Je fais le fichier test_file afin de verifier que j'ai le bon résultat mais il ressort toujours vide de valeurs...

    Une idée d'où ça peut venir?
    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    expect est un processus fils du shell, en tant que tel les variables qui y sont affectées/modifiées ne le sont pas dans le shell

    il faut rediriger le résultat vers un fichier dans expect.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Jo33140, l'exemple que tu donnes finit par 'exit', alors que le tien finit par 'set'.

    'exit' permet de transmettre une valeur à l'extérieur par le code erreur (affichable par echo $?).

  9. #9
    Invité
    Invité(e)
    Par défaut
    Salut,

    J'ai essayé les deux méthodes que vous m'avez données et ce que j'obtiens c'est rien. Je veux dire que la variable REASON reste vide que le transfert fonctionne ou pas... Mais pourtant, la syntaxe me parait bonne, je comprend pas d'où ça peut venir.

    Voici la nouvelle version de mon script, si jamais vous arrivez à voir la coquille



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #!/bin/sh
     
    SIM_TAB=( 'Dossier_test' )
    DESTINATION='user@IP:'
    DESTINATION_ERROR=0
     
     
    # ==========BOUCLE===========
    SIM_NUM=${#SIM_TAB[*]}
     
    for((i=0;i<=($SIM_NUM - 1);i++))
    do
    SIM_NAME=${SIM_TAB[$i]}
     
     
    # 17 =========TRANSFERT========
    expect - <<ENDSCRIPT
      set timeout -1
      spawn scp -r $SIM_NAME $DESTINATION
      expect {
           "*password:*"
           {
              send "MDP\r"
              exp_continue
          }
      }
      catch wait REASON
      exit $REASON
    ENDSCRIPT
     
    #echo $? > jo_file
     
    #STATUS=$?
     
    #echo $STATUS > jo_file
     
    #if [ STATUS == 0 ];
    #   then
    #     rm -r $SIM_NAME
    #   else
    #     cp -r $SIM_NAME /space/jbrulatout/Simulation_Recuperation/
    #     DESTINATION_ERROR=1
    #     rm -r $SIM_NAME
    #fi
     
    #if [ $DESTINATION_ERROR == 1 ];
    #   then
    #     echo "Simulation transfered on Zephyre" | mail -s " $SIM_NAME ended " blalba@blalba.fr
    #   else
    #     echo "Simulation ended" | mail -s " $SIM_NAME ended " blalba@blalba.fr
    #fi
     
    done

  10. #10
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Plusieurs choses:
    • Les lignes commançant par # ne s'exécutent pas. Je ne sais pas ce que tu as posté. Dans la suite, j'imagine que tu fais sauter les #
    • 'echo $? >jofile' n'est pas une mauvaise idée
    • 'STATUS=$?' est une mauvaise idée car il utilise le résultat de la commande echo (qui selon toute vraisemblance a fonctionné, donc 0)
    • 'echo $STATUS >jo_file' est une mauvaise idée car tu écrases le fichier. Donc le resultat que tu avais stocké précédemment.
      'echo $STATUS >>jo_file' est préférable. Sauf que STATUS ne contient rien d'informatif comme dit dans le point précédent.
    • Pourquoi ne pas mettre $? dans une variable tout de suite après expect?

Discussions similaires

  1. Réponses: 17
    Dernier message: 15/05/2007, 18h35
  2. transfert de fichier P2P : connexion ????
    Par Stephen54 dans le forum Développement
    Réponses: 8
    Dernier message: 11/02/2005, 00h31
  3. Transfert de fichiers par sockets
    Par Kaori dans le forum C++
    Réponses: 19
    Dernier message: 26/01/2005, 13h58
  4. Transfert de fichier par ftp
    Par schub1015 dans le forum MFC
    Réponses: 3
    Dernier message: 14/01/2004, 17h53
  5. [Socket]Transfert de fichier
    Par Aminos dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 19/04/2003, 13h58

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