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 POSIX Discussion :

Spawn sftp et exécution commandes shell


Sujet :

Shell et commandes POSIX

  1. #1
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut Spawn sftp et exécution commandes shell
    Bonjour,

    je suis pas un tueur en shell MAIS j'ai trouvé ce petit script qui me permet d'automatiser dans un ksh une connection sftp pour migrer des fichiers sur ma becane UNIX.

    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
    #!/usr/bin/expect
    cd /home/ess_tms/temp/JTMSF/
    set timeout -1    
     
    set USER user
    set PASS etl
    set HOST mon_serveur
    set INF_PATH_OUT /toto/data/mutualise/out/tms/temp_files/
     
    spawn sftp $USER@$HOST
     
    expect password:
    send "$PASS\r"
     
    expect sftp>
    send "cd $INF_PATH_OUT/JTMSF\r" 
     
    expect sftp>
    send "get *.txt\r"
     
    expect sftp>
    send "exit\r"
     
    rm -f /home/rep/temp/JTMSF/*.gz
    mv /home/rep/temp/JTMSF/toto.txt /home/rep/temp/JTMSF/titi.txt
    Jusqu'a la ligne 22 tout va bien, il me fait ma copie des fichiers, mais l'exécution des lignes 24 et 25 plante et me donne ce message d'erreur :
    sftp> invalid command name "rm"
    while executing
    "rm -f /home/ess_tms/temp/JTMSF/*.gz"
    (file "./test2.ksh" line 24)
    Je pense que malgré le "exit\r" en ligne 22, je suis toujours sous une session sftp et refuse donc de me lancer mes commandes shell.

    Est-ce que quelqu'un a une idée pour m'aider ?

    Merci d'avance.

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,

    Je ne connais pas trop expect, mais je ne pense pas que lui même connaisse des commande comme "rm"

    Si tu regardes ta première ligne, tu verra que tu n'es pas dans un shell mais dans expect.

    donc, retire les dernière ligne, tu crée un script shell, qui lance ton script expect puis tu mais tes commandes shell après...
    Cordialement.

  3. #3
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Remplacer le shell par celui que tu utilises.
    Le "cd ..." en début de script ne sert à rien.

    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
    #!/bin/sh
     
    /usr/bin/expect <<- 'EOF'
    set timeout -1    
     
    set USER user
    set PASS etl
    set HOST mon_serveur
    set INF_PATH_OUT /toto/data/mutualise/out/tms/temp_files/
     
    spawn sftp $USER@$HOST
     
    expect password:
    send "$PASS\r"
     
    expect sftp>
    send "cd $INF_PATH_OUT/JTMSF\r" 
     
    expect sftp>
    send "get *.txt\r"
     
    expect sftp>
    send "exit\r"
    EOF
     
    rm -f /home/rep/temp/JTMSF/*.gz
    mv /home/rep/temp/JTMSF/toto.txt /home/rep/temp/JTMSF/titi.txt
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  4. #4
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    Merci pour votre aide.
    Zipe31, ton script ne fonctionne qu'à moitié. Là où le mien faisait le transfert sftp mais pas la suippression et le renommage des fichiers une fois le transfert fait, le tiens fais le contraire.

    Et encore, sous réserve que les fichiers soient tansferés soient présents; dans ce cas, il fait bien la suppression et le renommage. Si les fichiers transferés ne sont pas présents, il ne se passe rien du tout....

    La commande cd en début de scripts sert à me positionner dès le début dans le dossier qui doit accueillir en local les fichiers de la machiune distante

  5. #5
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par mederik Voir le message
    La commande cd en début de scripts sert à me positionner dès le début dans le dossier qui doit accueillir en local les fichiers de la machiune distante
    Oups Ben remets-là et refais un test
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Sinon, il y a la commande sftp equivalente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lcd /home/ess_tms/temp/JTMSF/
    qui peut être rajouter dans la partie expect après connexion sftp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    ...
    expect sftp>
    send "lcd /home/ess_tms/temp/JTMSF\r"
    Cordialement.

  7. #7
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    Bonjour à tous,

    personne alors pour tenter une explication et une solution à : comment faire dans un même script pour exécuter des commandes shell dans un "spawn expect" ?

  8. #8
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    Malgré ma bonne volonté et votre aide, je n'y arrive toujours pas.
    Je suis coincé sur ce fichu script de quelques lignes depuis des jours.

    Je vais essayer de reformuler mon probléme et surtout ce que je cherche à faire :

    - je veux automatiser via un script une session sftp
    - dans cette session, je veux bien sûr transférer des fichiers de la machine distante vers la machine à partir de laquelle j'ai lancé ce script.
    - puis, une fois ces transfets terminés, il me faut lancer des commandes shell pour supprimer quelques fichiers et en renommer d'autres.

    Donc, le petit script que j'ai fait fait le job en ce qui concerne la partie SFTP. Mais dès que je lance les commandes shell, il plante.

    C'est parce que dès le début, j'ai indiqué au script que je veux ouvrir une session "expect"
    alors que pour que les commandes shell s'executent il faudrait avoir précisé que l'on est dans du shell avec ça
    Donc je cherche un moyen de faire passer des ordres shell dans un expect. Est-ce que quelqu'un peut m'aider...
    Ou alors il y a une autre approche...?

    Je vous l'ai dis, je suis null en shell, je maîtrise pas du tout.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Bonjour, il me semble que zipe31 t'a indiqué une piste fructueuse!

    As-tu essayé sa proposition (faire un vrai script shell commençant par le shebang #!/bin/sh) et quel en a été le résultat?

  10. #10
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    As-tu essayé sa proposition (faire un vrai script shell commençant par le shebang #!/bin/sh) et quel en a été le résultat?
    Mais oui, j'ai essayé, mais pour des raisons que j'ignore, je dois vraiment être nul ou fatigué, cela ne fonctionne pas.

    D'autant que oui, je suis d'accord avec toi sur ta remarque et avec lui sur sa solution car au travers de mes recherches sur le net, il se dégage bien qu'il faut encapsuler une session "spaxn expect" dans un ksh via l'utilisation du Mais ca fonctionne pas...

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par mederik Voir le message
    Mais oui, j'ai essayé, mais pour des raisons que j'ignore, je dois vraiment être nul ou fatigué, cela ne fonctionne pas.

    Mais ca fonctionne pas...
    C'est un peu court, jeune homme! (référence connue)

    Pourrais-tu montrer ce que tu as essayé (de manière à ce que nous puissions éventuellement détecter des imperfections) et indiquer précisément ce qui ne marche pô? Y a-t-il des erreurs, des messages? Que se passe-t-il?

    PS: c'est difficile de faire un diagnostic sans informations...

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    La seule chose strict à respecter quand on fait de l'encapsulation dans un script shell qui fonctionne sur tous les shell digne de ce nom est:
    -prendre la commande qui va utiliser le fichier encapsuler et je parle bien de fichier encapsuler (ici /usr/bin/expect )
    -la faire suivre de la double redirection d'entrée (<<)+ un mot (qui va indiquer au shell ou finit le fichier encapsulé) que l'on appelera ici FIN, ce qui donne <<FIN
    et donc la commande complète:
    /usr/bin/expect <<FIN

    a partir de là, on est dans le fichier encapsulé, et donc celui-ci ne doit pas suivre les règles d'indentation que tu as dans ton shell (sauf si tu es sur que cette indentation n'a pas d'impact ce qui n'est pas le cas par exemple en python)
    et la seule chose qui indique au shell la fin du script est une ligne qui commence et qui ne contient strictement que le fameux mot que tu as indiquer (ici FIN), ce qui donne par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/ksh
    #divers commandes shell
    ...
    ...
    /usr/bin/expect <<FIN
    ...
    ...
    divers commandes expect
    ...
    ...
    FIN
    #on revient dans le shell
    ...
    ...
    Cordialement.

  13. #13
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    et la seule chose qui indique au shell la fin du script est une ligne qui commence et qui ne contient strictement que le fameux mot que tu as indiquer (ici FIN),
    J'ai appris (récemment ) qu'on pouvait mettre un tiret entre le "<<" et le mot clé (ici FIN) et, du coup, indenter le ligne contenant ce mot-clé

    ce qui donne par exemple:
    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
    #!/bin/ksh
    #divers commandes shell
    ...
    if ...
    then
        /usr/bin/expect <<-FIN
    ...
    ...
    divers commandes expect (non indentées)
    ...
    ...
        FIN
        #on revient dans le shell (après un FIN indenté)
        ...
    fi
    ...
    Il semble que ça fonctionne avec sh et bash lorsque le FIN est indenté avec des tabulations et non des espaces...

  14. #14
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Oui, je connais aussi, mais je suis resté sur le basic du basic qui fonctionne dans tous les cas (en gros, la recette version newbies )
    Cordialement.

  15. #15
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Citation Envoyé par jack-ft Voir le message
    J'ai appris (récemment ) qu'on pouvait mettre un tiret entre le "<<" et le mot clé (ici FIN) et, du coup, indenter le ligne contenant ce mot-clé (...)
    Il semble que ça fonctionne avec sh et bash lorsque le FIN est indenté avec des tabulations et non des espaces...
    Euh... non, pas la ligne finale contenant le mot-clé de fin, celui-ci devant être bien collé en début de ligne, mais on peut indenter le code inséré pour une meilleure lisibilité.

    Par contre oui il faut que ce soit des tabulations et non des espaces.

    Autre astuce, entourer le mot-clé de quotes simples ou doubles (ou en le protégeant d'un bakslash) permet d'intégrer des variables qui ne seront pas interprétées mais restituées littéralement.

    Source
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  16. #16
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    C'est un peu court, jeune homme!
    c'est gentil ça, je le prends comme un compliment; le "jeune homme" en tout cas

    Bref, merci disedorgue pour l'explication. Clair, net et précis. J'ai enfin tout comprité à quoi ça servait.

    Pour revenir à mon script, voilà ce qu'il fait maintenant :
    - la connection SFTP est OK
    - sur le retour de la fenêtre ssh, je vois qu'il fait ses transferts avec les taux de transfert. Mais dans les fait, quand je regarde dans le dossier cible où il doivent être déposés : ben y'a rien. Ils sont en fait déposés dans le dossier du user sous /home avec lequel je me connecte pour lancer ce ksh. Il ne prend donc pas en compte ma commande shel "cd" en début de script qui je pensais me permettait de me placer dans le bon répertoire cible pour le transfert
    - Quant aux commandes shell de suppression et renommage, je sais qu'elles fonctionnent.

    Donc la seule chose qui reste à corriger, c'est : comment faire pour qu'il transfert dans le bon dossier.

    J'ai essayé un send "lcd lechemin/de/mon/dossier/cible". Mais rien ne se passe. La fenêtre ssh reste freezée et rien n'est fait...

    Voilà mon script :
    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
    #!/bin/ksh
    set PATH_IN /home/ess_tms/temp/JTMSF
    cd $PATH_IN 
     
    /usr/bin/expect <<'EOF'
    set USER user
    set PASS datastage
    set HOST monserveur
    set INF_PATH_OUT /monserveur/data/mutualise/out/tms/TgtFiles
    set timeout -1    
    spawn sftp $USER@$HOST
     
    expect password:
    send "$PASS\r"
     
    expect sftp>
    send "cd $INF_PATH_OUT/JTMSF\r" 
     
    expect sftp>
    send "get *.txt\r"
     
    expect sftp>
    send "exit\r"
    EOF
     
    rm -f /home/ess_tms/temp/JTMSF/*.gz
    mv /home/ess_tms/temp/JTMSF/TMSMDAI.txt /home/ess_tms/temp/JTMSF/DB_IND.txt

  17. #17
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par mederik Voir le message
    Voilà mon script :
    Ben voilà! Quand tu veux...

    Te souvient-il du "de manière à ce que nous puissions éventuellement détecter des imperfections"?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/ksh
    set PATH_IN /home/ess_tms/temp/JTMSF
    cd $PATH_IN
    Je t'invite à essayer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/ksh
    set PATH_IN /home/ess_tms/temp/JTMSF
    echo "PATH_IN contient désormais la stupéfiante valeur de $PATH_IN"
    J'imagine que tu comprends maintenant pourquoi les fichiers sont déposés dans le home directory...

    PS: as-tu fait du csh dans une autre vie?

    Donc la seule chose qui reste à corriger, c'est : comment faire pour qu'il transfert dans le bon dossier.
    J'imagine que tu veux dire "pour qu'il transfère" (au subjonctif)...

  18. #18
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Bon je viens de faire des tests chez moi et j'avais le même problème de script mis en pause et plus rien qui se passe

    Donc, j'ai changé le set timeout -1 en set timeout 5, la valeur pouvant être réduite, et depuis tout roule avec un temps de pause de 5 secondes entre chaque commande à partir du moment où je suis logué

    Voilà le test...

    Contenu du répertoire de travail (1 script + 2 répertoires vides) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ ls -R
    .:
    rep  script_expect.sh  toto
     
    ./rep:
     
    ./toto:
    Le script (en bash) :
    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
    $ cat script_expect.sh 
    #!/bin/bash
     
    cd rep
     
    /usr/bin/expect <<- 'EOF'
    set timeout 5   
     
    set USER XXXXX
    set PASS XXXXX
    set HOST XXXXX.YYYY.YY
    set INF_PATH_OUT Pilotes
     
    spawn lftp $USER@$HOST
     
    expect "Mot de passe :"
    send -- "$PASS\n"
     
    expect "lftp XXXXX@XXXXX.YYYY.YY:~>"
    send -- "cd $INF_PATH_OUT\n" 
     
    expect "cd ok, cwd=/Pilotes"
    expect "lftp XXXXX@XXXXX.YYYY.YY:/Pilotes~>"
    send -- "mget *.zip\n"
     
    expect "lftp XXXXX@XXXXX.YYYY.YY:Pilotes~>"
    send "exit\n"
    EOF
     
    pwd 
    ls -lh /home/jp/trash/rep/*.zip
    mv -v /home/jp/trash/rep/*.zip /home/jp/trash/toto/
    L'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ ./script_expect.sh 
    spawn lftp XXXXX@XXXXX.YYYY.YY
    Mot de passe : 
    lftp XXXXX@XXXXX.YYYY.YY:~> cd Pilotes             
    cd ok, cwd=/Pilotes          
    lftp XXXXX@XXXXX.YYYY.YY:/Pilotes> mget *.zip
    5214 octets transférés                                                    
    lftp XXXXX@XXXXX.YYYY.YY:/Pilotes> /home/jp/trash/rep
    -rw-r--r-- 1 jp jp 5,1K mai    9 11:41 /home/jp/trash/rep/pcDistant.zip
    «/home/jp/trash/rep/pcDistant.zip» -> «/home/jp/trash/toto/pcDistant.zip»
    Le nouveau contenu du répertoire de travail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ ls -R
    .:
    rep  script_expect.sh  toto
     
    ./rep:
     
    ./toto:
    pcDistant.zip
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  19. #19
    Membre habitué
    Homme Profil pro
    Indépendant spécialiste Cognos/Essbase
    Inscrit en
    Août 2008
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Indépendant spécialiste Cognos/Essbase
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2008
    Messages : 384
    Points : 193
    Points
    193
    Par défaut
    Bon merci à tous pour votre aide,

    le script fonctionne maintenant. Il y avait en effet une grossière erreur topé par jack-ft.

    Voici le script qui fonctionne
    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
     
    PATH_IN=/home/ess_tms/temp/JTMSF
     
    cd $PATH_IN
     
    /usr/bin/expect <<'EOF'
    set timeout 5
    set USER user
    set PASS datastage
    set HOST host
    set INF_PATH_OUT /sldbfil2/data/mutualise/out/tms/TgtFiles
     
    spawn sftp $USER@$HOST
    expect password:
    send "$PASS\r"
     
    expect sftp>
    send "cd $INF_PATH_OUT/JTMSF\r" 
     
    expect sftp>
    send "get *.txt\r"
     
    expect sftp>
    send "exit\r"
    EOF
     
    rm -f /home/ess_tms/temp/JTMSF/*.gz
    mv /home/ess_tms/temp/JTMSF/TMSMDAI.txt /home/ess_tms/temp/JTMSF/DB_IND.txt
    Maintenant, deuxième étape. Il se trouve que je dois faire la même manip sous différents dossiers (avec la même racine) une 10aine de fois.

    Au lieu de répeter ce même script 10 fois et de les lancer unitairement, je voudrais créer un seul script qui boucle.
    L'idée serait de demander dans le script à l'utilisateur de choisir ce qu'il veut lancer, de capturer les choix dans le script de l'utilisateur puis d'intégrer ces choix dans un tableau et de boucler sur ce tableau.

    Il me semble bien que cela est possible non ?
    Pour poser une question et capturer les saisies j'imagine on utiliserait une truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    echo "Quel cube voulez vous lancer :"\n
    echo "pour le cube SE, taper 1"\n
    echo "pour le cube SQ, taper 2"\n
    echo "pour le cube SW, taper 3"\n
    echo "Tous les cubes, tapez *"\n
    echo "une selection, tapez le N° du cube séparé par une virgule (ex : 2,3)"\n
    read name
    echo $name|awk -F "," '{print $1 $2 $3}'
    Est ce que je suis sur la bonne piste ?
    Par ailleurs, comment intégrer ces choix dans un tableau ?

    Merci de nouveau pour vos conseils.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exécution commande shell
    Par lefevrelaumonier dans le forum Shell et commandes GNU
    Réponses: 20
    Dernier message: 20/01/2015, 08h48
  2. Exécution commande shell
    Par Shinsuryu dans le forum Web
    Réponses: 3
    Dernier message: 24/12/2010, 08h11
  3. expression régulière + excution de commande shell
    Par goanes dans le forum Langage
    Réponses: 3
    Dernier message: 11/10/2006, 13h53
  4. [Système] Exécution commandes shell
    Par rfufu dans le forum Langage
    Réponses: 1
    Dernier message: 28/04/2006, 23h30
  5. [Système] Exécution commande shell impossible
    Par mick84m dans le forum Langage
    Réponses: 5
    Dernier message: 28/04/2006, 15h43

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