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

Répondre à