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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 835
    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 835
    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
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 659
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 659
    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...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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