Loading...
17.04.06

42sh (Tech 1)

But du projet : Réalisation d’un Shell de type bash.

Description du projet :

42sh fait partie des trois projets les plus importants que doivent rendre les étudiants en fin de première année.
Après trois mini-projets (minishell 1 à 3) faisant appel aux notions à maîtriser pour réaliser celui-ci, les étudiants sont prêts à travailler par groupe de 4 à 6 personnes sur ce projet qui, étant l’aboutissement d’un an de travail, est d’une grande importance dans la décision du passage en deuxième année.

Le projet consiste en l’écriture d’un Shell du niveau de bash, tcsh et autres. Il se décompose en deux parties :

  • Une partie obligatoire qui représente 40 % de la note du projet).
  • Une partie optionnelle qui ne peut être faite que si la partie obligatoire fonctionne complètement.

La stabilité et l’utilisation de l’ensemble est largement prise en compte.

Aspect technique :

A) La partie obligatoire :

Elle comprend les parties suivantes :

  • Une acquisition de ligne minimale :
    • affichage d’un prompt plus ou moins élaboré
    • récupération de la ligne tapée
  • Exécution des commandes avec leurs paramètres : (ex: $ls -l / )
    • gestion correcte des espaces et des tabulations
    • gestion du PATH (qui n’est pas forcément de système de cash)
    • gestion des erreurs et valeurs de retour
  • les redirections :
    • ex: $> /tmp/z -l
    • < > >>
    • les pipes
  • builtins:
    • cd (avec cd seul et cd -)
    • echo
    • exit
  • les séparateurs:
    • ;
    • &&
    • ||

ex: $cd /tmp;ls -l > /tmp/xx < /dev/null |echo * ;sleep 100& who;ls || who && pwd ; echo test

B) La partie optionnelle :

C’est là que les groupes gagnent la majorité des points. Le choix des options est libre, mais la cohérence de l’ensemble est prise en compte. De même que pour la partie obligatoire la stabilité est beaucoup plus importante que la quantité. Une option supplémentaire ne doit pas nuire à l’ensemble, surtout à la partie obligatoire, afin de préserver l’ergonomie.
Liste d’options souhaitables:

  • les inhibiteurs (" ‘ \ ).
  • ex: $ls "who|’" ‘"’"slt\""
  • le globing * ? [ ] { }
  • ex: $echo {a*[^c],b??.*[a-z]}/b*.{c,h}
  • le background
  • ex: $sleep 100 &
  • les `
  • ex: $kill -9 `ps ax | grep netscape | awk ‘{print $1}’`
  • les ()
  • ex: $(cut -d\ -f2 .note | tr ‘\n’ +;echo 0)| bc -l
  • les variables (locales et d’environ).
  • ex: $set a=val;echo $a;ls $a;$a
  • variables spéciales
  • ex: term, precmd, cwdcmd, cwd, ignoreof …
  • history
  • ex : $history – avec ! et modificateur / $!ls / $!12 / $!-4 / $!ls:s/.c/.h + linkage avec l’édition de ligne
  • alias
  • édition de ligne:
    • multi ligne
    • avec rebinding dynamique
    • complétion dynamique (fichier, commande, contextuel ….)
  • job control (très apprécié)
  • scripting (très long).
  • Scroll to top