Une des raisons qui font que les novices s'en vont en courant quand ils utilisent ksh réside dans le fait qu'ils ne trouvent pas par défaut un environnement convivail et qu'il faut :
1) mapper les flêches pour l'historique (dans le .profile) : alias __A=$(print -n "\020") alias __B=$(print -n "\016") alias __C=$(print -n "\006") alias __D=$(print -n "\002") set -o emacs Sun comme d'autres n'ont pas compris que ces 5 lignes devraient se trouver soit dans le /etc/profile dans la case -ksh ou dans les modèles situés dans /etc/skel. A ce sujet offrir un modèle aussi nul que celui proposé montre que Sun n'a absolument pas compris qu'il faut soigner détails et finition. C'est comme cela qu'on se démarque des autres. 2) ils ignorent que la complétion sur les noms de fichiers se fait en tapant 2 fois la touche Escape Je comprends donc les utilisateurs qui se ruent sur bash même s'ils ont tort. Ceci est valable pour la version POSIX de ksh connue sur le nom de ksh88 (développée en 1988). Il existe une version beaucoup plus puissante appelée ksh93 toujours maintenue par David Korn et dont les binaires sont disponibles pour Solaris, Linux, BSD etc. (dtksh de CDE est dérivée de la Version 93d de ksh93 et il permet de faire des fenêtres X11/Motif/CDE en shell !). ksh93 peut travailler en flottant et possède les tableaux associatifs. On peut lui rajouter des commandes internes sous forme de librairies .so, etc. Dans cette version le mapping historique se déclare différemment. En gros on peut tout faire ou presque y compris mapper ESC ESC en TAB typeset -A Keytable trap 'eval "${Keytable[${.sh.edchar}]}"' KEYBD function keybind { typeset key=$(print -f "%q" "$2") case $# in 2) Keytable[$1]=".sh.edchar=$key" ;; 1) unset Keytable[$1] ;; *) print -u2 "Usage: $0 key [action]" return 2 # usage errors return 2 by default ;; esac } keybind $'\E[A' $'\020' # Up key keybind $'\E[B' $'\016' # Down key keybind $'\E[C' $'\06' # Right key keybind $'\E[D' $'\02' # Left key keybind $'\E[H' $'\01' # Home key keybind $'\E[Y' $'\05' # End key keybind $'\t' $'\E\E' # Tab for command-line completion http://www.kornshell.com/ Il y a également un plugin appelé Tksh qui permet de faire du Tk avec ksh93. http://www.research.att.com/sw/download/ De son côté bash possède de nombreuses fonctionnalités de ksh93 mais ne couvre pas complètement ksh 88. en plus certaines fonctionnalités doivent être activées par une commande ( ce qui est génant pour la portabilité). La version 3.0 de bash est beaucoup plus stable au niveau des fonctionnalités de ksh. Enfin ce qui est navrant dans tout cela c'est que les programmeurs utilisent ksh et même bash comme ils utilisaient sh il y a 25 ans. Ils ignorent 90 % des fonctionnalités de ces nouveux shells. Exemple peu de programmeurs connaissent la différence entre : if [ $x != "t" ] et if [[ $x == "t" ]] ne savent pas qu'on peut remplacer l'antédiluvienne forme i=`expr $i + 1` par (( i += 1 )) et qu'on peut utiliser tous les opérateurs du C if (( $i == 3 && $x != 9 )) est valide en ksh et bash. ou qu'on peut faire basename de $filename comme ceci ${filename##*/} -- Christian Pélissier Office National d'Études et de Recherches Aérospatiales BP 72 92322 Chatillon Tel: 33 1 46 73 44 19, Fax: 33 1 46 73 41 50
_______________________________________________ Solaris_fr liste de diffusion en français pour Solaris, sur toutes architectures Solaris_fr@x86.sun.com http://x86.sun.com/mailman/listinfo/solaris_fr