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 :

Problème avec un ls dans un for et variable d'environnement


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 10
    Points
    10
    Par défaut Problème avec un ls dans un for et variable d'environnement
    Bonjour à tous,

    Je souhaiterai avoir votre point de vue sur un script que je n'arrive pas à faire tourner.

    J'ai essayé de le modifier et de le simplifier pour ne faire apparaître que le problème que je rencontre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #! /bin/sh
     
    #charge des variables d'environnement dont $TEST_HOME
    . /home/conf/var.sh
     
    #test1
    ls -l $TEST_HOME/java/tomcat/conf/Catalina/localhost/test.xml
     
    while read line  
    do
            #test2
    	ls -l $line
    done < test.txt
    Contenu de test.txt : $TEST_HOME/java/tomcat/conf/Catalina/localhost/test.xml

    Mon problème se situe au niveau des "ls". Je pensais obtenir le même résultat pour le test1 que pour le test2 c'est à dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    -rw-rw-r-- 1 test test  899 mar 23  2012 /var/test/java/tomcat/conf/Catalina/localhost/test.xml
    -rw-rw-r-- 1 test test  899 mar 23  2012 /var/test/java/tomcat/conf/Catalina/localhost/test.xml
    Au lieu de cela j'obtiens ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    -rw-rw-r-- 1 test test  899 mar 23  2012 /var/test/java/tomcat/conf/Catalina/localhost/test.xml
    ls: $TEST_HOME/java/tomcat/conf/Catalina/localhost/test.xml: Aucun fichier ou repertoire de ce type
    Le résultat de "ls -l $line" n'est pas ce que j'attendais, on dirait qu'il n'arive pas à interpréter $TEST_HOME.

    J'espère m'être fait comprendre, et surtout que vous pourrez m'aider à contourner ce problème.

    Merci

  2. #2
    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
    Donc, si j'ai bien compris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ cat test.txt
    $TEST_HOME/java/tomcat/conf/Catalina/localhost/test.xml
    Et tu voudrais l'expansion de la variable $TEST_HOME ?

    Car, effectivement, rien ne lui dit d'expanser la variable!

    Je vois 2 possibilités:
    - soit créer en amont le fichier avec la variable déjà expansée, si c'est possible, ce qui règle le problème en aval
    - soit demander l'interprétation explicite avec 'eval' (attention: eval is evil...):
    [edit]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read line ; do
            #test2
    	$(eval "ls -l \"$line\"") # Surtout pas de simples quotes!
    done < test.txt
    [/edit]

    Attention: si test.txt contient, par exemple, quelque chose comme $(rm -rf /*), ça peut être flippant...
    Je t'invite à essayer pour voir...
    Euh... non, mais j'déconnais, là...

    Sinon, on n'utilise jamais 'ls' dans un script (sauf si c'est pour de l'affichage pour l'utilisateur)...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Je voudrais en effet avoir le même résultat pour mon ls, qu'il soit fait ou non dans la bouche "for".

    Le ls est un exemple, je ne fais pas ce dans mon script mais c'était pour moi le plus simple moyen d'exposer mon problème.

    Je viens de tester ta proposition mas j'ai le même résultat : ls: $TEST_HOME/java/tomcat/conf/Catalina/localhost/test.xml: Aucun fichier ou repertoire de ce type

    Concernant ta proposition 1, est-ce facile d'obtenir à partir d'un fichier contenant par exemple :

    $TEST_HOME/java/tomcat/conf/Catalina/localhost/test.xml
    $TEST_HOME/java/tomcat/conf/Catalina/localhost/test1.xml

    un fichier contenant :

    /var/home/java/tomcat/conf/Catalina/localhost/test.xml
    /var/home/java/tomcat/conf/Catalina/localhost/test1.xml

    Car ce serait en effet un moyen de contourner mon problème.

  4. #4
    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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while read line  
    do
            #test2
    	ls -l $line
    done < <(sed 's#$TEST_HOME#'"$TEST_HOME"'#'test.txt
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  5. #5
    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
    Si tu n'as que cette variable-ci TEST_HOME, je cautionne fortement la proposition de zipe31, sinon, dans la mienne, je me suis trompé: il faut mettre des doubles quotes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read line ; do
            #test2
    	$(eval "ls -l \"$line\"")
    done < test.txt
    mais je rappelle que l'utilisation de 'eval' introduit de fortes failles de sécurité.
    Si c'est pour un usage perso, pas de problème.

    Pour la solution amont, je proposais de créer le fichier avec le contenu de la variable (dans le cas où c'est un fichier créé par programme):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    { echo "$TEST_HOME/java/tomcat/conf/Catalina/localhost/test.xml"
    echo "$TEST_HOME/java/tomcat/conf/Catalina/localhost/test1.xml"
    } > test.txt
    Si c'est un fichier créé à la main ou si la valeur de TEST_HOME n'est pas connue au moment de la création, ça ne marche pas!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 6
    Points : 10
    Points
    10
    Par défaut
    Merci pour vos réponses, j'ai en effet plusieurs variables dans mon fichier (le but est de fournir une liste de fichiers ou dossiers dans un fichier et d'avoir un script qui fera un tar de tout ces fichiers).

    Ce n'est pas pour un usage perso donc pour l'instant la solution est d'obtenir un le liste de fichier sans variable pour ne pas avoir de problème dans ma boucle.

Discussions similaires

  1. Problème avec cin.getlin dans un for
    Par Carnat89 dans le forum Débuter
    Réponses: 2
    Dernier message: 02/07/2009, 21h09
  2. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22
  3. Problème avec un LIKE dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2004, 14h38
  4. [VB.NET] Problème avec un OptionButton dans Excel 2003
    Par alfprod dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/09/2004, 13h40
  5. [MFC] problème avec les insertions dans CComboBox
    Par Joeleclems dans le forum MFC
    Réponses: 12
    Dernier message: 11/06/2004, 15h31

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