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

Programmation et administration système Perl Discussion :

Problème Exécution commande système ds perl


Sujet :

Programmation et administration système Perl

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 75
    Points : 42
    Points
    42
    Par défaut Problème Exécution commande système ds perl
    Bonjour,

    Je me confronte à une difficulté récurrente. Lorsque j’exécute une commande système directement en shell pas de souci.

    Dans mon script perl, je souhaite directement exécuter cette même commande avec une connexion ssh et là impossible.

    Voici un extrait de mon code:
    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
    
    #-------------- 2 : Connexion au serveur 
    my $ssh2 = Net::SSH2->new();
    $ssh2->connect($server) or die "ERREUR_CONNEXION :\tsur serveur $server\t$!";
    
    #-------------- 3 : Authentification par clé RSA
    $ssh2 -> auth_publickey ( $auth[0], $auth[1], $auth[2] ) or die "ERR_LOGIN :\tproblème auth RSA\t";
    
    
    
    my $chan2 = $ssh2->channel();
    
    #$chan2->exec('find /var/log/* -type f -size +90M -exec ls -Sl {} \;'); #fonctionnel Dans ce cas mais j'ai besoin de la commande si dessous.
    
    #COMMANDE DONT J AI BESOIN QUI NE FONCTIONNE PAS
     $chan2->exec("find /var/log/* -type f -size +90M -exec ls -Sl {} \; | awk '{print $5 " " $9 }'");
    
    my @tab;
    unshift(@tab,$_) while <$chan2>;# je récupère le 
    reslutat de la commande que j'envoie dans un tableau
    print @tab;#J'affiche mon tableau
    
    
    $chan2->close;# FERMETURE TUNNEL CHAN2
    $ssh2->disconnect();#Fermeture connexion ssh

    Je vous remercie pour vos conseils

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Bonjour,

    Tu as surement un problème d'interpolation de variables car tu te mélanges avec les simples et double guillemets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $chan2->exec(q!find /var/log/* -type f -size +90M -exec ls -Sl {} \; | awk '{print $5 " " $9 }'!);

  3. #3
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,

    Je n'ai pas Net::SSH2, je ne peux pas faire de test avancé.
    Pour limiter les pb d'interpolation je te propose une autre syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /cygdrive/e/_APPLI -type f |  ls -l | awk '{ s= $5; if(s >= 200){print $0} }'
    Au préalable il faut s'assurer qu'il n'y a pas d'alias sur ls ou les supprimer :
    Éventuellement (non testé) toujours sans alias :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /var/log/* -type f -exec ls -l {} \ ; | awk '{ s= $5; if(s >= 200){print $0} }'
    [EDIT 18:11]
    En Cygwin -exec ne passe pas,
    J'ai fait un essai sur Linux :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
    
    
    #find /var/log/* -type f -size +90M -exec ls -Sl {} \; | awk '{print $5 " " $9 }'! );    #INIT
    #my @Cde = `find . -type f -size +10000 -exec ls -Sl {} \; | awk '{print $5 " " $9 }'`;  #OK MANO
    
    my @Cde = 'find . -type f -size +10000 -exec ls -Sl {} \; | awk \'{print $5 " " $9 }\'';
    
    print "\n\nCde=@Cde\n\n";
    
    my @TabRes = `@Cde`;
    print "TABRES\n @TabRes \n";
    
    print "TABRES_0=$TabRes[0]=";
    print "TABRES_2=$TabRes[2]=";
    Il faut juste protéger les ' par \
    ATTENTION il y à des \n dans @TabRes

    La solution djibtil est bien sûr plus lisible

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 75
    Points : 42
    Points
    42
    Par défaut merci
    Bonjour,

    j'ai effectivement testé vos solutions.

    effectivement en échappant les ' ça fonctionne beaucoup mieux !

    Un grand merci a tous pour vos conseils

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

Discussions similaires

  1. Problème exécution commande DOS
    Par Micke7 dans le forum Général Java
    Réponses: 9
    Dernier message: 25/06/2010, 16h59
  2. [DATA] Problème exécution commande "X" paramétrée
    Par Filippo dans le forum SAS Base
    Réponses: 9
    Dernier message: 27/01/2010, 09h30
  3. Exécuter une commande système avec perl
    Par Olivier Regnier dans le forum Langage
    Réponses: 12
    Dernier message: 08/04/2007, 16h41
  4. exécuter une commande système à partir de sqlplus?
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 24
    Dernier message: 08/11/2005, 15h11
  5. Réponses: 5
    Dernier message: 19/04/2005, 08h50

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