Objectif des projets 21sh et 42sh
- Écrire un shell UNIX le plus stable et le plus complet possible.
- Lecture et édition de ligne avancée avec Termcaps.
- Analyse lexicale ("Lexing").
- Analyse syntaxique ("Parsing") / Parsing avancé.
- Analyse sémantique.
- Gestion des processus et de leurs interactions.
Les sujets des projets sont à dispositions, au format PDF, à la racine du repository.
Clonage du dossier :
$> git clone https://github.com/mtacnet/21sh-42sh.git
Le projet peut être compilé à l'aide de make ou make all. La compilation de la bibliothèque libft est automatiquement effectuée (son Makefile est appelé depuis celui de 42sh). L'exécutable est nommé 42sh.
La commande make clean permet de supprimer tous les fichiers objets et make fclean de supprimer, en plus de ceux-ci, l'exécutable.
La commande make re est équivalent à make fclean all.
/!\ Rappel: Le projet a été principalement développé dans/pour un environnement macOS Sierra (10.12.16). Le projet est susceptible de ne pas avoir les comportements souhaités sous un autre système d'exploitation. /!\
Une fois le projet 42h compilé vous pouvez le lancer à l'aide de la commande ./42sh.
/!\ PRÉCISION: Lien documentation officielle POSIX: http://pubs.opengroup.org/onlinepubs/9699919799/) /!\
-
Édition de la ligne de commande à l’aide de la bibliothèque termcaps.
-
Les fonctionnalités des combinaisons de touches
ctrl + Detctrl + Cdans l’édition de la ligne et l’éxecution d’un processus. -
Séparateur de commandes
; -
Les pipes
| -
Les opérateurs logiques
&&et||. -
Exécution de commandes simples avec leurs paramètres et gestion du PATH.
-
Gestion des erreurs et de la valeur de retour des commandes avec la commande
echo $?. -
Les redirections avancées: l’aggrégation des sorties de fichier et le heredoc
<<- Les quatre redirections
<,>,<<(heredoc) et>>. - Les aggrégations de descripteurs de fichiers, par exemple pour fermer la sortie d’erreur (
>&et<&).
- Les quatre redirections
-
Utiliser les flèches du haut et du bas pour naviguer dans l’historique des commandes, édition de la ligne possible.
-
Couper, copier et/ou coller tout ou partie d’une ligne avec les séquences de touches suivantes:
shift + LEFT/RIGHTSélectionner du texte.alt + CCopier le texte sélectionné.alt + VColler le texte sélectionné.alt + XCouper le texte sélectionné.
-
Se déplacer par "mot" vers la gauche et vers la droite avec
ctrl + LEFTetctrl + RIGHT. -
Aller directement au début et à la fin d’une ligne avec les touches
homeetend. -
Ecrire et éditer une commande sur plusieurs lignes. Dans ce cas,
ctrl + UPetctrl + DOWNpermettent de passer d’une ligne à l’autre de la commande en restant sur la même colonne ou la colonne. -
Gestion complète des quotes et doubles quotes, même sur plusieurs lignes (hors expansions).
-
Complétion simple avec la touche
tab -
Gestion des variables locales grace aux builtins
setetunset -
Implémentation des builtins suivantes en respectant les normes dictées par POSIX:
cdechoexitenvsetenv(équivalent de export sous bash)setunsetenvunset
-
Historique des commandes et les builtins
historyet!avec toutes leurs options.
- Alexis Guérin - https://github.com/Aguerin42
- Thomas Grange - https://github.com/tgrange42
- Hippolyte Einfalt - https://github.com/PixTillzcorp
- Mickaël Tacnet - https://github.com/mtacnet/