/minishell

Première étape de la réalisation d'un shell. Dans ce projet, vous devez réaliser un mini-shell capable de lire et d'évaluer des commandes simples de l'utilisateur. La lecture impliquera une analyse lexicale et syntaxique triviale de la commande, et l'évaluation impliquera de rechercher le binaire correspondant sur la machine et l'exécuter, ou bien d'exécuter le code concerné dans le cas d'une commande "built-in" au shell.

Primary LanguageC

Sujet - Partie obligatoire

• Vous devez programmer un mini interpréteur de commandes UNIX.

• Cet interpréteur doit afficher un prompt (un simple "$> " par exemple) et attendre que vous tapiez une ligne de commande, validée par un retour à la ligne.

• Le prompt n’est de nouveau affiché qu’après la fin de l’exécution de la commande.

• Les lignes de commande sont simples, pas de pipes, pas de redirections ou autres fonctions avancées.

• Les exécutables sont ceux que l’on peut trouver dans les chemins indiqués dans la variable PATH.

• Dans le cas où l’exécutable ne peut être trouvé, il faut afficher un message d’erreur et réafficher le prompt.

• Vous devez gérer les erreurs sans utiliser errno, en affichant un message adapté sur la sortie d’erreur.

• Vous devez gérer correctement le PATH et l’environnement (copie du char **environ système).

• Vous devez implémenter une série de builtins : echo, cd, setenv, unsetenv, env, exit.

• Vous choisissez le shell de référence que vous souhaitez.

• Vous devez gérer les expansions $ et ˜

Sujet - Partie bonus Pas mal de features seront au menu des 21sh et 42sh. Voici néanmoins une liste de bonus que vous pouvez implémenter dès maintenant si le coeur vous en dit :

• La gestion des signaux, et notamment Ctrl-C. L’utilisation de variables globales est autorisé dans le cadre de la gestion des signaux.

• La gestion des droits d’exécution dans le PATH.

• La complétion.

• La séparation des commandes avec le " ;".

• D’autres bonus que vous jugez utiles.