Derniere mise a jour : 9 fevrier 2026

Shell Unix Ameliore

2024 Systeme C

Presentation

Objectif principal : Un shell Unix avec des features en plus : pipes, redirections, historique, auto-completion, variables d'environnement. Version amelioree du shell basique fait en TP.

Technologies utilisees : C avec fork/exec pour lancer les commandes. Termios pour le mode raw et gerer les touches speciales. Readline-like maison pour l'edition de ligne.

Fonctionnalites cles : Pipes multiples (cmd1 | cmd2 | cmd3), redirections (>, >>, <), background (&), historique avec fleches haut/bas, completion par Tab, aliases.

Livrables attendus : Un shell utilisable au quotidien pour des taches simples. Fichier de config pour les aliases. Historique persistant.

Calendrier previsionnel : Trois semaines. Les pipes c'est complexe avec les file descriptors a bien gerer. Et la completion c'est un projet a part entiere.

Parties prenantes & criteres de succes : Version 2 du TP shell. Je voulais un shell que je pourrais utiliser vraiment, pas juste un exercice.

Le Defi

Les pipes multiples. Faut creer les bons pipes, forker dans le bon ordre, connecter stdin/stdout correctement, et attendre tous les processus. Un oubli de close() et ca bloque. J'ai mis 3 jours a debugger ca.

La Solution

Je cree tous les pipes d'abord (n-1 pipes pour n commandes). Ensuite je fork pour chaque commande, chaque enfant ferme les pipes qu'il n'utilise pas et dup2 les bons fd. Le parent ferme tous les pipes et wait. Schema sur papier obligatoire.

Architecture Technique

Module parser.c qui tokenize la ligne et detecte pipes/redirections. Module executor.c qui gere fork/exec/pipe. Module readline.c pour l'edition de ligne avec termios. Module history.c pour l'historique. Module completion.c qui liste les fichiers/commandes pour Tab.

Points Cles

  • Pipes multiples fonctionnels
  • Auto-completion par Tab
  • Historique persistant

Apercu

Resultats & Apprentissages

Mon shell marche vraiment, je l'ai utilise pendant quelques semaines. Les file descriptors et le process management en Unix ca n'a plus de secret pour moi. J'apprecie plus Bash maintenant que je sais ce qu'il fait.

Evolutions Futures

Job control complet (fg, bg, jobs). Scripts shell avec if/for/while. Expansion des variables et globbing (*). Un prompt configurable avec le branch Git, etc.

Retour aux projets Me contacter