Improve readme

Upd readme

Upd readme
This commit is contained in:
savalet
2025-05-22 21:10:04 +02:00
parent 35b152f754
commit 25cef3f846

138
README.md
View File

@@ -1,37 +1,103 @@
- [x] `:`
- [x] `alias`
- [x] `astprint`
- [x] `builtins`
- [x] `cd`/`chdir`
- [x] `echo`
- [x] `env`/`setenv`/`unsetenv` (`env` à completer)
- [x] `export`
- [x] `exit`
- [x] `printenv`
- [x] `pushd`/`popd`
- [x] `repeat`
- [x] `termname`
- [x] `which`/`where`
- [x] `yes`
- [x] `expr`
# 🐚 42sh A Unix Shell Inspired by TCSH
- [x] pipes
- [x] redirections
- [x] line editing (move, del)
- [x] input shortcut (^A,^E,^F,^B,...)
- [x] foreground/background jobs (`&`), (btln `fg`) (bonus)
- [x] while/foreach loops
- [x] if
- [x] `||`/`&&`
- [x] script with shebangs
- [x] `-c` eval argument
- [x] `-e` exit on failure
- [x] `-h` help (open man?)
- [x] globbing
- [x] var interpreter
- [x] inhibitor
- [x] magic quotes
- [x] parenthesis
- [x] command history (`history` btln)
- [x] heredocs
- [x] special env vars: `$?`, `$$`, ...
**42sh** is a custom Unix shell written in C as part of the EPITECH curriculum.
Inspired by `tcsh`, this project aims to recreate a powerful, interactive command-line interface, complete with many built-in features, scripting capabilities, and user-friendly enhancements.
## ✨ Features
- **Built-in commands**:
- `cd`, `echo`, `exit`, `alias`, `setenv`, `unsetenv`, `env`, `printenv`, `which`, `where`, `repeat`, `yes`, `termname`, `expr`, and more...
- **Redirections**:
- Input/output redirection support: `>`, `<`, `>>`, `<<` (here-documents)
- **Pipelines**:
- Command chaining using pipes (`|`)
- **Globbing**:
- Wildcard expansion (`*`, `?`, etc.)
- **Job control**:
- Background job handling with `&` `fg` `bg` `Ctrl+Z`
- **History**:
- Command history navigation using arrow keys
- **Interractive reverse search**:
- Search in the history with `Ctrl+R`
- **Line editing**:
- Interactive line editing and cursor movement
- **Auto completion**:
- Interactive auto completion with `TAB`
- **Git integration**:
- Dynamic prompt with branch name, ahead and behind indicator
- **Alias system**:
- Define and expand custom aliases
- **Environment variables**:
- Manage the shells environment
- And more...
## ⚙️ Build & Run
```bash
git clone https://github.com/Savapitech/42sh.git
cd 42sh
make
./42sh
```
- Requires a POSIX-compliant system and a C compiler (tested with gcc on Linux).
## 📁 Project Structure
```txt
42sh/
├── include/ # Header files
├── src/ # Shell source code
├── ulib/ # Custom utility libraries
├── validation_tests.py # Functional tests
├── Makefile # Build system
└── README.md # You're reading it!
```
## 🧠 Concepts & Architecture
- **Lexer/Parser**: Tokenizes user input into an Abstract Syntax Tree (AST)
- **Executor**: Traverses the AST to execute commands
- **Builtins**: Custom implementation of standard shell commands
## 🧪 Testing
You can run the test suite using:
```bash
make tests_run
```
(Requires `python3`)
## ❄️ Nix Support
This project provides full support for Nix:
- You can run the shell directly with:
```bash
nix run github:Savapitech/42sh
```
- If you are working on the project, a development environment is available via the flake:
```bash
nix develop
```
This gives you access to a reproducible devShell with all required dependencies.
## 🛠️ Development Notes
Written in **C99**
Follows the **EPITECH coding style**
No memory leaks (only if no errors occured)
Handles signals (e.g., `Ctrl+C`, `Ctrl+D`)
Compatible with **tcsh-style** interactive behavior
## 📜 License
This project is part of the Epitech curriculum and is shared for educational purposes.
## 👥 Authors
[@savalet](https://github.com/savalet), [@tekClovis](https://github.com/tekClovis), [@Arthur-gtr](https://github.com/Arthur-gtr), [@Titouanhct](https://github.com/Titouanhct), [@eiffis](https://github.com/eiffis)
![CI](https://github.com/Savapitech/42sh/actions/workflows/main.yml/badge.svg)