Linux RedHat 5.x : KSH93 ou PDKSH ?

Linux RedHat 5.x : KSH93 ou PDKSH ? - Logiciels - Linux et OS Alternatifs

Marsh Posté le 11-10-2010 à 09:20:10    

RedHat 5.5 est sortit depuis un bail...
 
RedHat c'est bof : le KSH utilisé déjà on sait même pas lequel c'est. Enfin si mais faut connaître. Je ne donnerai pas ici les commandes pour connaître la version en place c'est pas le sujet.
 
En entreprise tous les scripts sont en KSH.
Il faut les réadapter parceque en fonction du KSH utilisé (KSH93 ou PDKSH) et bien le "read" pipé il fonctionne plus !
PDKSH ne prend PAS en compte le read pipé...
Mais KSH93 c'est pareil, il marche pas bien !!!! quand on fait des unset de fonction dans un shell exécuté dans l'environnement et ben on peut plus les appeler les fonctions alors que le FPATH est bien défini !!!! ET OUAIS !!!!
 
Oh c'est juste un tout petit détail hein... Personne en PDKSH ne tape jamais de lignes du style
 
cat fichier | while read variable1 variable2 ...
 
ni même
 
$(exécution) | read variable1 variable2 ...
 
Alors pourquoi s'en faire ?
Pas besoin de tout réécrire n'est ce pas ???
 
Oh ce n'est pas la faute de RedHat ni d'IBM, juste c'est la faute de personne si ni le KSH93 ni le PDKSH n'est POSIX, enfin pardon ma langue fourche ^^ ...si des fonctionnalités INDISPENSABLES disparaissent...  :fou:  
 
Comment maintenant en PDKSH on fait pour lire ligne à ligne un fichier et faire des traitements readant les colonnes ?  :pfff:  
Comment on fait en KSH93 quand on veut recharger des fonctions, grâce au FPATH ?
 
Moi un OS me fait un truc comme ça je le dégage direct !
Alors oui y'a la solution d'utiliser PDKSH (le unset de fonction on peut pas le contourner) et de sepasser du read pipé mais bon...
 
Linux RedHat j'en suis pas mais alors vraiment PAS content du tout !  
 
Alors et chez vous ? Au boulot ?
Parmis tous ceux qui utilisent RedHat (et pas un autre hein, y'a que RedHat qu'on voit en entreprise, les autres c'est des inconscients ou des PME), aviez vous remarqué ces PETITES différences par rapport au KSH classique ?  
Sinon allez vous vérifier ?
Si oui quel KSH utilisez vous ?

Message cité 2 fois
Message édité par audioscavenger le 11-10-2010 à 12:14:04
Reply

Marsh Posté le 11-10-2010 à 09:20:10   

Reply

Marsh Posté le 11-10-2010 à 15:13:43    

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) GENIAL RedHat...

Reply

Marsh Posté le 11-10-2010 à 17:58:47    

audioscavenger a écrit :

j'ajouterai que :
1) où sont les forum actifs sur RedHat en français ?


y'en a ? [:tang]  
Au pire, il faut voir la scène Fedora, qui dispose(rait ?) d'un plus grand nombre d'adeptes.
 
Je comparerais KSH comme le powershell de Microsoft : c'est joli, mais au final on revient aux bases... du bash.
 
En entreprise je n'ai croisé qu'une seule fois RedHat : c'était pour gérer un PABX, comme quoi pour les applications critiques y'a autre chose que Debian ou SuSE :sol:


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 12-10-2010 à 07:08:05    

ouais bash...
t'as trop raison, si seulement j'avais fini mes études et que j'étais décisionnaire :)

Reply

Marsh Posté le 12-10-2010 à 12:25:23    

Justement, si tu es décisionnaire, tu choisis KSH.
Tu es exécutant, tu choisis bash :D


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 12-10-2010 à 20:23:05    

audioscavenger a écrit :


Comment maintenant en PDKSH on fait pour lire ligne à ligne un fichier et faire des traitements readant les colonnes ?  :pfff:  
 


Heu, en utilisant des redirections plutôt que des "cat pipe" qui servent à rien ?
Quand je vois la tronche des scripts que je dois maintenir au boulot, je pense que les auteurs (partis y a longtemps) sont au moins aussi fautifs que les bugs de l'outil ...
 
Cette syntaxe fonctionne très bien en KSH sous RHEL5:

Code :
  1. while read colonneA colonneB colonneC; do
  2.   blablabla
  3. done < fichier.entree


Quand au "commande | read", personnellement j'utilise plutôt un set et les "positional parameters" (pas trouvé la traduction en français).

Code :
  1. set $( command )
  2. echo "Colonne 1: $1"


J'utilise RHEL4 et RHEL5 au boulot, je me coltine du KSH (héritage d'applis historiquement sous Solaris, moi je préfère le bash, qui est le shell par défaut de toutes façons).
 
Cependant, je viens de tester d'installer PDKSH sur ma VM RHEL 5.5 à la maison.

Code :
  1. $ pdksh --login
  2. $ echo TUTU | read variable
  3. $ echo $variable
  4. (pas de réponse)


Je confirme ça ne fonctionne pas.
 
 

Code :
  1. $ cat /etc/fstab | while read ligne; do echo $ligne; done
  2. LABEL=/ / ext3 defaults 1 1
  3. tmpfs /dev/shm tmpfs defaults 0 0
  4. devpts /dev/pts devpts gid=5,mode=620 0 0
  5. sysfs /sys sysfs defaults 0 0
  6. proc /proc proc defaults 0 0
  7. LABEL=SWAP-sda2 swap swap defaults 0 0


Sur la boucle, je n'ai pas le problème que tu décris. Tu utilises quelle version toi ?
 
Pour info;

Code :
  1. $ rpm -qi pdksh
  2. Name        : pdksh                        Relocations: (not relocatable)
  3. Version     : 5.2.14                            Vendor: CentOS
  4. Release     : 36.el5                        Build Date: jeu 03 sep 2009 22:40:30 CEST
  5. Install Date: mar 12 oct 2010 20:25:48 CEST      Build Host: builder10.centos.org
  6. Group       : System Environment/Shells     Source RPM: pdksh-5.2.14-36.el5.src.rpm
  7. Size        : 386930                           License: Public Domain
  8. Signature   : DSA/SHA1, jeu 01 oct 2009 02:42:20 CEST, Key ID a8a447dce8562897
  9. URL         : http://www.cs.mun.ca/~michael/pdksh/
  10. Summary     : A public domain shell implementing ksh-88
  11. Description :
  12. The pdksh package contains public domain implementation of ksh-88.
  13. The ksh shell is a command interpreter intended for both interactive
  14. and shell script use. Ksh's command language is a superset of the sh
  15. shell language.
  16. Pdksh is unmaintained since 1998 and is obsoleted by ksh package.


Message édité par [Albator] le 12-10-2010 à 20:28:51
Reply

Marsh Posté le 12-10-2010 à 20:37:24    

audioscavenger a écrit :


Mais KSH93 c'est pareil, il marche pas bien !!!! quand on fait des unset de fonction dans un shell exécuté dans l'environnement et ben on peut plus les appeler les fonctions alors que le FPATH est bien défini !!!! ET OUAIS !!!!


Et maintenant un test en KSH93, toujours sous RHEL5.5 ...
 

Code :
  1. $ cat mafonc
  2. mafonc() {
  3.         echo "OK mafonc"
  4. }
  5. $ cat monscript
  6. #!/bin/ksh93
  7. FPATH=$PWD
  8. mafonc
  9. unset mafonc
  10. mafonc
  11. $ ./monscript
  12. OK mafonc
  13. OK mafonc


Ou alors y a un truc que j'ai pas bien saisi ??

Code :
  1. $ rpm -qi ksh
  2. Name        : ksh                          Relocations: (not relocatable)
  3. Version     : 20100202                          Vendor: CentOS
  4. Release     : 1.el5_5.1                     Build Date: sam 11 sep 2010 15:09:10 CEST
  5. Install Date: mar 12 oct 2010 20:18:54 CEST      Build Host: builder10.centos.org
  6. Group       : Applications/Shells           Source RPM: ksh-20100202-1.el5_5.1.src.rpm
  7. Size        : 3267867                          License: Common Public License Version 1.0
  8. Signature   : DSA/SHA1, dim 12 sep 2010 17:32:18 CEST, Key ID a8a447dce8562897
  9. URL         : http://www.kornshell.com/
  10. Summary     : Le shell ATT Korn original
  11. Description :
  12. KSH-93 est la version la plus récente de KornShell par David Korn des
  13. Laboratoires AT&T Bell.
  14. KornShell est un language de programmation shell, qui est compatible
  15. de manière ascendante avec "sh" (Bourne Shell).

Reply

Marsh Posté le 13-10-2010 à 08:11:18    

faut faire unset -f mafonc
 
unset mafonc fait un unset de la variable mafonc ce qui est différent ^^
 
bon depuis j'ai trouvé une solution qui semble marcher, faut faire pour chaque fonction des répertoires contenus dans le FPATH un chargement dans l'environnement, dans le script chargé dans l'environnement, et ne pas faire d'unset -f avant.
 
. ./script.ksh
 
et dans script.ksh :
 
ceci ne marche PAS :

Code :
  1. # récupération des fonctions en mémoire : AIX
  2. _functions=$(typeset -f|egrep "^function "|cut -f2 -d" " )
  3. # récupération des fonctions en mémoire : SunOS / Linux
  4. _functions=$(typeset -f|egrep "[a-Z]*\(\)|^function"|cut -f1 -d\(|cut -f2 -d" " )
  5. # nettoyage des fonctions
  6. for _function in $_functions; do unset -f $_function;done
  7. # chargement forcé des nouvelles fonctions
  8. for _function in $(ls $FPATH); do . $FPATH/$_function;done
  9. # appel a une des fonctions du répertoire $FPATH : KO
  10. mafonc
  11. -ksh: .[48]: mafonc: not found [No such file or directory]


 
ceci marche :

Code :
  1. # chargement forcé des nouvelles fonctions
  2. for _function in $(ls $FPATH); do . $FPATH/$_function;done
  3. # appel a une des fonctions du répertoire $FPATH : OK
  4. mafonc


 
pour tous les scripts appelés en dehors du script.ksh chargé dans l'environnement, les appels aux fonctions marchent bien même avec un unset -f avant. C'est quand on charge le script.ksh dans l'environnement et qu'on fait appel aux fonctions unsettées dadans que ça couille.


Message édité par audioscavenger le 13-10-2010 à 08:26:10
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed