
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 : 
You can execute script with 42sh like this : 
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 :
- Executing a simple command
- Executing recreated builtins :
- about
- alias
- cd
- echo
- else
- end
- endif
- env
- exit
- foreach
- help
- history
- if
- repeat
- set
- setenv
- source
- unalias
- unset
- unsetenv
- where
- which
 
- Dynamic prompt
- Dynamic line edition (use arrow and ctrl command)
- Use of history and event (all commands are stock in the .42sh_history)
- Use of variable (local and environmental)
- Handle of specials variabes (~, ? and some other variables)
- Handle backticks ("`")
- Handle semi-colons (";")
- Handle operators ("&&" and "||")
- Handle pipes ("|")
- Handle redirection ("<", "<<", ">" and ">>")
- Handle inhibitors ('"', "'" and "\\")
- Handle parentheses ("()")
- Handle globbing ("*", "?", "[" and "]")
- Handle alias
- Handle scripting and scripting commands (if, else, endif, foreach and end)
@section autotoc_md5 Result 🚩
The result of this project is a <strong>almost perfect shell</strong>, <strong>very similar to TCSH</strong>.  <br>
If you discover a <strong>problem</strong> or an <strong>error</strong>, don't hesitate to <strong>create an issue</strong> and <strong>report it</strong> to us as soon as possible.
@subsection autotoc_md6 my.epitech.eu result
<table class="markdownTable">
  <tr class="markdownTableHead">    <th class="markdownTableHeadNone"> 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: 
- Lines: 84.8%
- Functions: 94.7%
- Branches: 45.4%
You can run the tester with this command : 
 You can compile the project and run the tester with this command : 
 You can compile the project and run the unit tests with this command : 
For more details, please click here.
Compilation 🛠️
You can compile the project with this command : 
If you want to debug the program, you can compile the project with this : 
If you want clean the project, you can run this command : 
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 : 
Documentation 📚
The documentation is accessible here.
You can generate the documentation with this command : 
 You need multiple package for generate them :
- doxygen
- doxygen-latex
- doxygen-doxywizard
- graphviz
Code mandatory 📦
- You'll need to create a branch where you'll push your code. Once you've completed your tasks on this branch, we'll work together to merge it and check that everything works.
- Every function you add must be code-style and documented.
- Before merging, you'll need to check that all unit tests pass by running make tests_run.
- If the github actions don't succeed, then ask yourself some questions
- Each commit will contain [+]or[-]or[~]followed by a message
- [+]: Add feature
- [-]: Delete feature
- [~]: Edit feature
 
Of course, in exceptional cases, we may depart from these rules. 
What's next ? 🚀
- Fix the latest scripting problems
- Fix final bugs in prompt and command writing
- Add job controls (background process, ctrl + Z, ...)
- Add unit tests on each piece of code
Contributors 👥
For this project, we were a group of 5 people. Here are the people in the group: