L’objectif de ce projet est de créer un shell minimaliste en C.
- Afficher un prompt en l’attente d’une nouvelle commande.
- Posséder un historique fonctionnel
- Chercher et lancer le bon exécutable (en se basant sur la variable d’environnement PATH, ou sur un chemin relatif ou absolu).
- Une variable globale max
- Ne pas interpréter de quotes (guillemets) non fermés, \ (le backslash) ou ; (le point-virgule).
- Gérer ’ (single quote) qui doit empêcher le shell d’interpréter les méta-caractères présents dans la séquence entre guillemets.
- Gérer " (double quote) qui doit empêcher le shell d’interpréter les méta-caractères présents dans la séquence entre guillemets sauf le $ (signe dollar)
- Redirections :
- < doit rediriger l’entrée.
- > doit rediriger la sortie.
- << doit recevoir un délimiteur et lire l’input donné jusqu’à rencontrer une ligne contenant le délimiteur. Cependant, l’historique n’a pas à être mis à jour !
- >> doit rediriger la sortie en mode append
- Pipes | . La sortie de chaque commande de la pipeline est connectée à l’entrée de la commande suivante grâce à un pipe
- Gérer les variables d’environnement (un $ suivi d’une séquence de caractères) qui doivent être substituées par leur contenu.
- Gérer $? qui doit être substitué par le statut de sortie de la dernière pipeline exécutée au premier plan.
- Gérer ctrl-C, ctrl-D et ctrl-\ qui doivent fonctionner comme dans bash.
- En mode interactif :
- Ctrl + C => nouveau prompt.
- Ctrl + D => quitte le shell.
- Ctrl + \ => ne fait rien.
- Builts-ins :
- echo avec l'option - n
- cd no option
- pwd no option
- export no option
- env no option or argument
- exit no option