|
1 | 1 | # MiniShell |
2 | 2 |
|
3 | | -Règles à respecter pour le shell : |
4 | | -1. Affichage et commandes de base : |
5 | | - • Afficher une invite lorsqu’il attend une nouvelle commande. |
6 | | - • Avoir un historique fonctionnel. |
7 | | -2. Recherche et exécution des commandes : |
8 | | - • Rechercher et lancer le bon exécutable : |
9 | | - • En fonction de la variable PATH. |
10 | | - • Ou en utilisant un chemin relatif ou absolu. |
11 | | -3. Gestion des caractères spéciaux et des citations : |
12 | | - • Ne pas interpréter : |
13 | | - • Les guillemets non fermés. |
14 | | - • Les caractères spéciaux qui ne sont pas requis (ex. \ ou ;). |
15 | | - • Gérer les guillemets simples (') : empêcher l’interprétation des métacaractères dans la séquence entre guillemets. |
16 | | - • Gérer les guillemets doubles (") : empêcher l’interprétation des métacaractères sauf pour $. |
17 | | -5. Redirections : |
18 | | - • < : Rediriger l’entrée. |
19 | | - • > : Rediriger la sortie. |
20 | | - • << : |
21 | | - • Accepter un délimiteur. |
22 | | - • Lire l’entrée jusqu’à rencontrer une ligne contenant ce délimiteur. |
23 | | - • Note : Cela ne doit pas mettre à jour l’historique. |
24 | | - • >> : Rediriger la sortie en mode ajout (append). |
25 | | -5. Gestion des pipes : |
26 | | - • Gérer les pipes (|) : |
27 | | - • La sortie de chaque commande doit être connectée à l’entrée de la commande suivante. |
28 | | -6. Gestion des variables et du statut d'exécution : |
29 | | - • Gérer les variables d’environnement ($ suivi d’une séquence de caractères) et les développer en leurs valeurs. |
30 | | - • Gérer ? pour qu’il se développe en le statut de sortie du dernier pipeline exécuté en premier plan. |
31 | | -7. Gestion des raccourcis clavier : |
32 | | - • ctrl-C : Afficher une nouvelle invite sur une nouvelle ligne (en mode interactif). |
33 | | - • ctrl-D : Quitter le shell. |
34 | | - • ctrl-\ : Ne rien faire (en mode interactif). |
35 | | -8. Commandes internes à implémenter : |
36 | | - • echo avec l’option -n. |
37 | | - • cd avec un chemin relatif ou absolu uniquement. |
38 | | - • pwd sans options. |
39 | | - • export sans options. |
40 | | - • unset sans options. |
41 | | - • env sans options ni arguments. |
42 | | - • exit sans options. |
| 3 | +## Rules |
| 4 | + |
| 5 | +This projects aims at replicating a very basic shell with : |
| 6 | +- basic interactive display with history |
| 7 | +- interpretation and execution of commands (with name or absolute path) |
| 8 | +- interpretation of variables |
| 9 | +- interpretation of wildcard `*` for the current directory |
| 10 | +- handling of single and double quotes |
| 11 | +- handling of redirections and heredoc (`<`, `<<`, `>>`, `>`) |
| 12 | +- handling of pipes |
| 13 | +- handling of execution status |
| 14 | +- handling of EOF and signals SIGINT, SIGQUIT |
| 15 | + |
| 16 | +A few builtin commands with no options were also implemented : |
| 17 | +- `cd` |
| 18 | +- `pwd` |
| 19 | +- `export` |
| 20 | +- `unset` |
| 21 | +- `env` |
| 22 | +`echo` with option n was also implemeted. |
| 23 | + |
| 24 | + |
| 25 | + |
0 commit comments