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

RedHat / CentOS / Fedora Discussion :

KSH 93 : unset de fonctions et FPATH


Sujet :

RedHat / CentOS / Fedora

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Points : 34
    Points
    34
    Par défaut KSH 93 : unset de fonctions et FPATH
    bonjour

    J'ai un souci avec l'appel aux fonctions contenues dans les répertoires de la variable $FPATH, à l'intérieur d'un script.
    Vous allez me dire si c'est un problème connu ou pas, car je n'ai pas ce problème avec : SunOS, AIX, ni PD KSH v5.2.14 99/07/13.2

    J'ai ce problème sur les RedHat suivants :

    Red Hat Enterprise Linux Server release 5.3 (Tikanga)
    Red Hat Enterprise Linux Server release 5.4 (Tikanga)
    Red Hat Enterprise Linux Server release 5.5 (Tikanga)

    avec les versions de KSH suivantes (ksh --version et echo ${.sh.version}):

    sh (AT&T Research) 93s+ 2008-01-31 / Version M 93s+ 2008-01-31
    sh (AT&T Research) 93t+ 2010-02-02 / Version AJM 93t+ 2010-02-02

    correspondant respectivement aux packages suivants :

    release 5.3 : ksh-20080202-2.el5
    release 5.4 : ksh-20080202-14.el5
    release 5.5 : ksh-20100202-1.el5

    Voici mon problème :

    Quand on appelle une fonction ("switch") se trouvant dans un répertoire du $FPATH, elle se charge en mémoire et peut être rappelée plus tard. On les voit en tapant "typeset -f" ou "typeset +f"

    => Dans un script que je charge dans l'environnement (. ./script) je change le répertoire contenu dans $FPATH (export FPATH=/newrep), et je fait appel à une fonction de même nom ("switch") se trouvant dans le nouveau répertoire.
    Comme elle est déjà chargée en mémoire, c'est toujours l'ancienne fonction qu'on appelle.
    Pour forcer l'appel à la nouvelle fonction, sans devoir la déclarer dans le script, je fait un "unset -f fonction", avant de l'appeler.
    OR chose incroyable, ça marche une fois sur 2.

    Quand la fonction n'est pas déjà chargée en mémoire, le unset -f ne fait rien, et l'appel à la nouvelle fonction est correct.
    Quand la fonction est déjà chargée en mémoire (ancienne comme nouvelle), le unset -f la détruit bien, mais l'appel à la fonction se traduit par :

    -ksh: .[60]: switch: not found [No such file or directory]

    Je n'ai pas ce comportement quand j'effectue ces opération sur le prompt, à la main.
    Je n'ai pas ce comportement quand je lance le script sans le charger dans l'environnement (./script)
    Le problème apparaît quand je charge le script dans l'environnement (. ./script)

    Vous pouvez reproduire ce problème chez vous très facilement car selon moi c'en est bien un, et vous verrez qu'a chaque chargement dans l'environnement de votre script, un coup ça marche, un coup ça marche pas. un coup ça marche, un coup ça marche pas.
    etc etc

    Pour vous permettre de reproduire rapidement le souci voici le pastebin vers le code de la fonction et du script appelé, il affiche des couleurs comme ça on voit bien le souci :

    http://pastebin.com/fzgfFTZW

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Points : 34
    Points
    34
    Par défaut
    ça intéresse personne ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 49
    Points : 34
    Points
    34
    Par défaut
    j'ajouterai que :
    1) où sont les forum actifs sur RedHat en français ?
    2) redhat a enregistré mes déclarations comme bugs
    3) PDKSH n'est pas maintenu
    4) sous REdHat 6 c'est Mksh qui sera introduit par défaut.
    5) on peut pas test le Mksh sur RedHat 5
    6) on dira ce qu'on veut sur gros billou mais il a toujours assuré une rétrocompatibilité sur les outils shell, lui

Discussions similaires

  1. bashdb (debugger bash), tracer une fonction externe ($FPATH)
    Par Gerald B dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 08/03/2013, 10h35
  2. Exécuter un Script ksh a partir d'une fonction ADA
    Par chaminette dans le forum Ada
    Réponses: 5
    Dernier message: 10/03/2009, 19h47
  3. ksh, retours de fonctions et retour chariot
    Par Seboss dans le forum Linux
    Réponses: 1
    Dernier message: 05/04/2007, 16h12
  4. Appel Fonction PERL via KSH
    Par mego dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2007, 13h06
  5. Réponses: 3
    Dernier message: 18/09/2006, 12h35

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