💻 42sh 🐚

42sh

Table of contents 📑

Description 📝

The 42sh is a project carried out by groups of 5 (see Contributors, during our 1st year in EPITECH Grand Ecole program.
Its purpose is to recreate in C a Unix shell based on TCSH.
In addition, we’ve taken inspiration from Powerlevel10k for our shell prompt.

Usage ⚔️

You can run 42sh like this :

./42sh  

You can execute script with 42sh like this :

./42sh [script]  

You can also add the 42sh to the shebang of a script, and when you run the script it will use the 42sh.

For more information, please see the help section.

> ./42sh --help  
USAGE
    ./42sh
    ./42sh [script]
DESCRIPTION  
    A Unix shell based on TCSH.  
    You can execute the help command to see the list of available builtins.  

Features list 📋

Our 42sh includes many of the features found in TCSH :

Result 🚩

The result of this project is a almost perfect shell, very similar to TCSH.
If you discover a problem or an error, don’t hesitate to create an issue and report it to us as soon as possible.

my.epitech.eu result

Category Percentage Numbers of tests Crash
basic tests 100% 4/4 No
path handling 100% 5/5 No
setenv and unsetenv 100% 2/2 No
builtin cd 100% 3/3 No
line formatting (space and tabs) 100% 8/8 No
error handling 100% 6/6 No
separator 100% 1/1 No
simple pipes 100% 3/3 No
advanced pipes 100% 6/6 No
redirections 100% 5/5 No
advanced manipulations 100% 3/3 No
&& and || tests 100% 3/3 No
globbing 100% 1/1 No
var interpreter 66,7% 2/3 No
inhibitor 100% 2/2 No
magic quotes 0% 0/3 No
alias 100% 4/4 No
scripting 0% 0/1 No
foreach 0% 0/1 No
which 100% 2/2 No
where 100% 2/2 No
if 0% 0/2 No
repeat 100% 1/1 No
parenthesis 0% 0/1 No
Results 87,5% 63/72 No

Keynote result

We got the best 42sh of our class.

Project Mark :

Mark : 14
Automatic tests (11.5 / 14) :

History (1.5 / 2) :
"!!" non fonctionnel
Job control (0 / 2) :

Dynamic command line (1 / 2) :

Oral Mark :

Mark : 3244
Testing Policy (4 / 4) :
Test unitaires ok + test
Methodology and Organisation (40 / 40) :
Commits branche ok, github project
Involvment (200 / 400) :
Builtins bonus
Scripting avancé
History
Oral Presentation (3000 / 4000) :
"Présenter la keynote"
Une seule personne pour gérer le diapo
Schema d'explication sur le cheminement  intéressant
Faute "fonctionnalitées"

Tests and code coverage

Functional tests were carried out with a bash tester and unit tests using criterion.
Unit tests are still to be performed, but a large part of the code is already covered:

You can run the tester with this command :

./tester.sh  

You can compile the project and run the tester with this command :

make tests  

You can compile the project and run the unit tests with this command :

make tests_run  

For more details, please click here.

Compilation 🛠️

You can compile the project with this command :

make  

If you want to debug the program, you can compile the project with this :

make debug   

If you want clean the project, you can run this command :

make fclean  

You can clean and compile the project with make re and for debugging make re_debug

You can compile the unit tests with this command :

make unit_tests  

Documentation 📚

The documentation is accessible here.

You can generate the documentation with this command :

make doc  

You need multiple package for generate them :

Code mandatory 📦

Of course, in exceptional cases, we may depart from these rules.

What’s next ? 🚀

Contributors 👥

For this project, we were a group of 5 people. Here are the people in the group: