42sh

Présentation par Loïc BRANSTETT,

Guillaume GEOFFROY Y

Le 31/05/2019

Sommaire

  1. Présentation du projet
  2. Organisation
  3. Architecture
  4. Fonctionnalités
  5. Tests automatisés
  6. Bonus
  7. Conclusion

Présentation du projet

42sh est un "tcsh"

Organisation

Icons made by Eucalyp and Freepik from flaticon.com is licensed by CC 3.0 BY

Organisation

Architecture

Icons made by Freepik from flaticon.com is licensed by CC 3.0 BY

Modulaires

Architecture

Noyau

sh

init

get_next_line

main

Commandes

block

pipe

parsing

check

Builtins

echo

if, else, foreach

env

...

cmd

cd

alias

Execution

eval_block

redirections

eval_cmd

exec

sub-shell

Parsing

estring

sstring

pstring

Prompt

actions

input

print

cursor

wstring

...

env

Architecture

Librairies:

  • libgnl (from get_next_line)
  • libmy (from cpool)
  • ncurses (for prompt)
  • libc (for execve, glob, ...)
  • wstring (new type)
typedef struct {
    wchar_t *chars;
    int lenght;
    int size;
} wstring_t;

Fonctionnalités

  • Variables d'environnement
  • Redirections et pipes
  • Séparateurs (; && ||)
  • $PATH et gestion des chemins
  • Prompt (multi-lignes)
  • Inibitors (échappement)
  • Globing (*’, ‘?’, ‘[’, ’]’)
  • Parenthèses (sous-shell)
  • Variables spéciales (postcmd, cwdcmd, precmd and ignoreof)
  • Historique et alias
  • Job control (&, fg, bg)
  • Backtick (`)
  • Scripting (SheBang)
$ $PATH $TOTO
$ cat < input > ouput
$ ls | grep fichier && echo found!
$ setenv $PATH "/usr/bin:."
$ echo "salut \
      je suis Loïc"
$ echo \n "\n" '\n'
$ ls *.c include/my_{sh,hs}.h
$ ( cd; pwd; ); pwd;
$ alias bat echo
$ bat !!
$ sleep 5 & ; jobs ; fg 1
$ echo `ls`
#!./42sh

Fonctionnalités

Tests automatisés

Lines

Branching

50%

60%

220 tests - criterion

5 tests - script

Tests automatisés

Noyau

Commandes

Builtins

70%

Execution

71%

Parsing

Prompt

0%

87%

92%

84%

Bonus

  • kill
  • builtins
  • \x23 \15 (hexa et octal)
  • ~/.42rc
  • Chemin minimisé
  • Support de l'Unicode
  • if (sur une ligne)
  • -c cmd
  • --help
  • $? et $$
  • $SHELL et $SHLVL
  • \alias
$ kill 42sh
$ builtins
kill echo cd setenv env [...]
$ echo -n "->\x0B<-"
->
<-
/home/user/Epitech/PSU_42sh_2018
-> ~/E/PSU_42sh_2018
$ echo éà•
éà•
$ if ( aa == aa ) echo ==
==
$ echo $? $$
0 8125
$ echo $SHELL $SHLVL
42sh 1
$ \ll
ll: Command not found.

Bonus

Conclusion

Questions ?

FIN

42sh

By urgau-1

42sh

  • 116