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

Linux Discussion :

KSH : Problème d'evaluation des varialbes


Sujet :

Linux

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1
    Par défaut KSH : Problème d'evaluation des varialbes
    Bonjour,

    J'ai un petit souci. J'ai un fichier paramètre que je parcours avec un while pour en récupérer les paramètre nécessaire à l'exécution d'un script.
    Dans ce fichier j'ai des chemins de définis pour la création de fichiers log, travail ...
    Le soucis c'est que j'aimerais pouvoir mettre par exemple $HOME/travail dans mon fichier paramètre mais cela ne fonctionne par car il ne substitut pas $HOME par /usr/toto par exemple.
    Voila un exemple du fichier paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    blablabla
     
    log_dir=$HOME/travail/log
    work_dir=$HOME/work
     
    blablabla
    Et la boucle que j'utilise pour le décodage :

    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
     
    while read line
    do
     
    	# Remove the carriage return from $line
    	line=`echo $line | tr -d '\r\n'`
    	# decode the line
    	field=`echo $line | awk -F "=" '{print $1}'`
    	value=`echo $line | awk -F "=" '{print $2}'`
     
    	case $field in 
    		log_dir ) dirlog=$value;;
    		work_dir ) dirwork=$value;;
    		...
    	esac
     
    done < $parameter_file
    Dans l'état actuel si j'affiche dirlog j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo $dirlog
    $HOME/travail/log
    Alors que je souhaite /usr/toto/travail/log

    J'espère que j'ai été assez clair.

    Qui aurait une solution svp ?
    Merci.

    PS : Si cette réponse a déjà été donnée désolé pour le doublon, mais je ne l'ai pas trouvée.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 875
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par rufhy Voir le message
    Bonjour,

    J'ai un petit souci. J'ai un fichier paramètre que je parcours avec un while pour en récupérer les paramètre nécessaire à l'exécution d'un script.
    Dans ce fichier j'ai des chemins de définis pour la création de fichiers log, travail ...
    Le soucis c'est que j'aimerais pouvoir mettre par exemple $HOME/travail dans mon fichier paramètre mais cela ne fonctionne par car il ne substitut pas $HOME par /usr/toto par exemple.
    Voila un exemple du fichier paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    blablabla
     
    log_dir=$HOME/travail/log
    work_dir=$HOME/work
     
    blablabla
    Et la boucle que j'utilise pour le décodage :

    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
     
    while read line
    do
     
    	# Remove the carriage return from $line
    	line=`echo $line | tr -d '\r\n'`
    	# decode the line
    	field=`echo $line | awk -F "=" '{print $1}'`
    	value=`echo $line | awk -F "=" '{print $2}'`
     
    	case $field in 
    		log_dir ) dirlog=$value;;
    		work_dir ) dirwork=$value;;
    		...
    	esac
     
    done < $parameter_file
    Dans l'état actuel si j'affiche dirlog j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo $dirlog
    $HOME/travail/log
    Alors que je souhaite /usr/toto/travail/log

    J'espère que j'ai été assez clair.
    Tout à fait clair. Ta chaine "$value" lis dans le fichier le texte "$HOME/travail/log" donc, quand tu affiches $value, tu affiches benoitement "$HOME/travail/log". Alors que tu aimerais en fait interpréter "$HOME" par son contenu. Un peu comme si tu avais une espèce de pointeur qui contiendrait "$$HOME" et qui traite ce "$$" comme étant "le contenu du contenu de..."

    Citation Envoyé par rufhy Voir le message
    Qui aurait une solution svp ?
    Moi. Il te faut passer par eval qui a pour rôle d'interpréter ce qu'on lui passe puis de traiter cette interprétation comme ordre shell.
    Donc si tu fais "echo $dirlog" ça affiche "$HOME/travail/log". Si tu fais "echo echo \$$dirlog" ça affichera "echo $HOME/travail/log" mais, si au lieu de mettre le premier echo tu le remplaces par eval en tapant "eval echo \$$dirlog", au lieu d'afficher"echo $HOME/travail/log" ça l'évaluera puis puis ça l'exécutera et ça te donnera "/usr/toto/travail/log"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Invité
    Invité(e)
    Par défaut
    bonjour,

    pourquoi ne pas sourcer le fichier paramètre ?
    les paramètres qui y sont définis le seront alors également dans le script en cours...

Discussions similaires

  1. problème our passer des string dans tableau d'int
    Par Battosaiii dans le forum C++
    Réponses: 9
    Dernier message: 15/07/2004, 17h42
  2. Problème à l'édition des liens avec BCC55 et Xerces
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/11/2003, 14h50
  3. Réponses: 4
    Dernier message: 23/07/2003, 13h07
  4. Réponses: 1
    Dernier message: 06/03/2003, 11h57
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

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