doc: Update README
This commit is contained in:
parent
b12733cad4
commit
cab8b0c51c
1 changed files with 32 additions and 15 deletions
47
README.md
47
README.md
|
|
@ -1,11 +1,12 @@
|
|||
# 42sh - A POSIX shell with a bad name
|
||||
|
||||
42sh is a shcool project aiming to implement a POSIX compliant shell in C.
|
||||
42sh is a project aiming to implement a POSIX-compliant shell written in C with only the standard library.
|
||||
Source de is fully documented with the doxygen format so you can easily understand how the project works by exploring it.
|
||||
|
||||
> **Note** This is a school project, therefore it probably won't interest you if you are looking for something useful.
|
||||
|
||||
## Getting started
|
||||
|
||||
TODO
|
||||
|
||||
### Build
|
||||
run this command:
|
||||
`autoreconf --force --verbose --install`
|
||||
|
|
@ -16,27 +17,43 @@ run this command:
|
|||
then:
|
||||
`make`
|
||||
|
||||
#### asan
|
||||
#### Build with ASan
|
||||
run this command:
|
||||
`./configure CFLAGS='-std=c99 -Werror -Wall -Wextra -Wvla -g -fsanitize=address'`
|
||||
|
||||
or for MacOS (Jean Here):
|
||||
`./configure CFLAGS='-std=c99 -Werror -Wall -Wextra -Wvla -I/opt/homebrew/include' LDFLAGS='-L/opt/homebrew/lib'`
|
||||
|
||||
|
||||
then:
|
||||
`make check`
|
||||
|
||||
## Project status
|
||||
|
||||
### Implemented features
|
||||
|
||||
* **Command Execution:** `$PATH` search and binary execution (via `fork` and `execvp`) with error return code handling.
|
||||
* **Built-ins:** Native implementation of `echo`, `cd`, `exit`, `export`, `unset`, `set`, `.`, `true`, `false`, as well as loop management with `break` and `continue`.
|
||||
* **Control Structures:** * Conditions: `if / then / elif / else / fi`.
|
||||
* Loops: `while`, `until` and `for`.
|
||||
* **Logical Operators:** Command chaining with `&&`, `||` and negation with `!`.
|
||||
* **Pipelines and Redirections:** * Full management of pipes `|` to connect the output of one process to the input of another.
|
||||
* Single and multiple redirections: `>`, `<`, `>>`, `>&`, `<&`, `<>`.
|
||||
* **Variables Management:** Assignment, variable expansion, and special variables handling like `$?` (return code of the last command).
|
||||
* **Command Grouping:** Execution blocks `{ ... }` and subshells creation `( ... )`.
|
||||
* **Quoting:** Support for weak (`"`) and strong (`'`) quoting for special characters escaping.
|
||||
|
||||
## Architecture
|
||||
|
||||
The shell operates on a classic compilation/interpretation pipeline:
|
||||
|
||||
1. **Lexer (Lexical Analysis):** Reads standard input (or script) character by character and generates a stream of "Tokens" (Words, Operators, Redirections).
|
||||
2. **Parser (Syntax Analysis):** Syntax analyzer that transforms the token stream into a complex Abstract Syntax Tree (AST). This module strictly manages the nesting of control structures and enforces the rigid grammar of the Shell Command Language.
|
||||
3. **Execution (AST Traversal):** The tree is traversed recursively. Redirections modify file descriptors (`dup2`), child processes are created (`fork`), and commands are executed.
|
||||
|
||||
|
||||
## Authors
|
||||
|
||||
- Guillem George
|
||||
- Matteo Flebus
|
||||
- Jean Herail
|
||||
- William Valenduc
|
||||
- Guillem George
|
||||
|
||||
## Project status
|
||||
|
||||
WIP
|
||||
|
||||
## TODO
|
||||
|
||||
# Autotools
|
||||
implement functions in all .c files to see if everything compiles.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue