Perl/shell

Résolu
bennyben -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,
J'ai un problème qui vous emblera surement basique mais je n'y arrive pas pour autant (je débute).
En fait j'ai commencé un script perl dont voici le code.

my $mavar
`cp ./bob_test bob_test_$mavar.xml` // commande system.C'est ici que le problème survient

Mon problème est le suivant: lorsque je veus faire cette manipulation on m'affiche un message d'erreur.
C'est le .xml que j'essaie de rajouter derriere ma variable qui est refusé...
Avez vous une idée pour palier à ce problème? Ce ".xml" est très important.

Merci d'avance.
Configuration: Windows XP
Internet Explorer 6.0

9 réponses

  1. gigaga Messages postés 2347 Date d'inscription   Statut Membre Dernière intervention   301
     
    Qu'est ce que : "./bob_test"? un fichier? un répertoire?
    que vaut "$mavar"?
    Si l'exécution est sous windows, tu ne peux pas utiliser la commande "cp" qui n'est utilisable que dans un environnement Unix.
    0
    1. bennyben
       
      Bonjour,
      $mavar est une adresse ip.
      Et je suis sous unix donc pas de problème pour le cp.
      Merci.
      0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Tout d'abord si tu fait du perl `` c'est pour capturer le résultat d'une commande
    Vu que tu fais un cp je ne pense pas que tu veux capturer quelque chose. Donc il faut utiliser la fonction system()

    system("cp", "./bob_test bob_test_${mavar}.xml");
    ou
    $mavar .= ".xml";
    system("cp", "./bob_test bob_test_$mavar");

    0
  3. bennyben
     
    Bonjour,

    Le même problème persiste, on m'affiche le message d'erreur "sh: .xml not found"

    Je ne pige pas...
    Merci d'avance
    0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    Affiche ton code.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bennyben
     
    Bonjour,

    Voici mon code

    print("entrer l'@ ip\n");
    my $ip = <STDIN>;
    print("$ip");

    `cp ./Modele.xml ./test_${ip}.xml`; //c'est ici que le message d'erreur apparait et ne met pas le .xml comme extension du fichier. (pour moi le porblème se pose à cause de la variable suivie du point mais sa n'est que mon avis).

    print ("Nom du site?\n");
    my $name= <STDIN>;

    `sed 's/NOM_DU_SITE/$name/g' test_455.xml > Erreur.xml`; //il ya une erreur ici aussi. Quand je veus remplacer NOM_DU_SITE par ma variable, Cela echoue alors que si je met directement la valeur de cette variable, sa fonctionne.

    Si vous avez des idées sur ces 2 points...
    Merci encore.
    0
    1. gigaga Messages postés 2347 Date d'inscription   Statut Membre Dernière intervention   301
       
      my $ip = <STDIN>;

      contient le retour chariot de fin.
      rajoute chomp($ip);
      0
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    J'ai fait une erreur dans la fonction system().
    Je t'ai dit qu'il ne faut pas utiliser les ``

    Voici un exemple avec le résultat

    lami20j@debian:~/trash$ cat ccm2_systemcp.pl
    #!/usr/bin/perl
    use strict;use warnings;
    
    print("entrer l'ip : ");
    chomp (my $ip = <STDIN>);
    print "$ip\n";
    
    system("cp", "./Modele.xml", "test_${ip}.xml");
    __END__
    Avant l'exécution de script
    lami20j@debian:~/trash$ ls -l Modele.xml
    -rw-r--r-- 1 lami20j lami20j 0 jan 27 16:46 Modele.xml
    lami20j@debian:~/trash$ ls -l test_192.168.1.1.xml
    ls: ne peut accéder test_192.168.1.1.xml: Aucun fichier ou répertoire de ce type
    Exécution script
    lami20j@debian:~/trash$ perl ccm2_systemcp.pl
    entrer l'ip : 192.168.1.1
    192.168.1.1
    Après exécution
    lami20j@debian:~/trash$ ls -l Modele.xml
    -rw-r--r-- 1 lami20j lami20j 0 jan 27 16:46 Modele.xml
    lami20j@debian:~/trash$ ls -l test_192.168.1.1.xml
    -rw-r--r-- 1 lami20j lami20j 0 jan 27 16:48 test_192.168.1.1.xml
    0
  8. bennyben
     
    Re,
    Super ça marche pour l'extension .xml !
    D'abord, merci beaucoup.

    Aurais tu une idée pour mon autre problème?
    Je vais tenter de la même façon le system()... Mais je ne suis pas sur vu qu'il ya a cette fois le resultat est renvoyé vers un autre fichier.

    Voici la ligne posant problème.
    Je te rappel l'erreur: La commande echoue lorsque je met ma variable $name alors que si je met une chaine de caractère directement dans ma commande sa fonctionne.

    ex:
    $name=bob;
    `sed 's/NOM_DU_SITE/$name/g' test_455.xml > Erreur.xml`;

    Ne marche pas

    alors que

    `sed 's/NOM_DU_SITE/bob/g' test_455.xml > Erreur.xml`;

    marche

    Merci encore pour ta reponse.
    Si tu as une idée pour ce problème...
    0
  9. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    Tu fait toujours en perl?
    Je parle de la commande avec sed
    0
    1. bennyben
       
      toujours mais de la même façon que précédemment c'est une commande unix intégré à mon script.
      0
  10. bennyben
     
    En fait c'est bon sa marche.
    Avec le chomp sa marche beaucoup mieux!

    Merci encore à toi.

    Bonne soirée.
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      Toute fois utiliser sed quand les regex sont implémenté déjà en Perl, c'est vraiment superflu.
      0