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
Partager