Files
minishell/README.md

134 lines
4.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- *This project has been made by sede-san and padan-pe* -->
<div align="center">
<!-- Project badge -->
<a href=".">
<img src=".github/README/minishelln.png">
</a>
<!-- Project name -->
<h1>minishell</h1>
<!-- Short description -->
<p>A simple bash-like shell written in C.</p>
<!-- Info badges -->
<img src="https://img.shields.io/badge/Score-No-black?style=for-the-badge&labelColor=black" alt="Score">
<!-- <img src="https://img.shields.io/badge/Score-100%2F100-brightgreen?style=for-the-badge&labelColor=black" alt="Score"> -->
<!-- <img src="https://img.shields.io/badge/Score-125%2F100-brightgreen?style=for-the-badge&labelColor=black" alt="Score"> -->
<img src="https://img.shields.io/badge/Language-C-blue?style=for-the-badge&labelColor=black" alt="Language">
<br>
<img src="https://img.shields.io/github/last-commit/sdevsantiago/minishell?display_timestamp=committer&style=for-the-badge&labelColor=black" alt="Last commit">
<br>
<img src="https://github.com/sdevsantiago/minishell/actions/workflows/norminette.yml/badge.svg">
<img src="https://github.com/sdevsantiago/minishell/actions/workflows/makefile.yml/badge.svg">
</div>
---
## About Project
> The purpose of this project is to create a simple bash-like shell.
**minishell** is a minimal bash-like shell implementation written in C. It provides essential shell functionality including command execution, piping, input/output redirection, and built-in commands.
### Key Features
- **Command Execution**: Execute external programs with argument parsing and path resolution.
- **Pipelines**: Connect multiple commands using the pipe operator (`|`).
- **Redirections**: Support for input (`<`), output (`>`), and append (`>>`) file redirections.
- **Built-in Commands**: `cd`, `echo`, `env`, `exit`, `export`, `pwd`, `unset`.
- **Environment Variables**: Access and manage shell environment variables.
- **Interactive Shell**: Read-Evaluate-Print Loop (REPL) powered by GNU Readline.
- **Quote Handling**: Proper handling of single and double quotes for literal strings.
### Development
The codebase adheres to **Norminette v4** standards and uses a modular architecture separating parsing, execution, and built-in command logic. Build artifacts are automatically generated; refer to `AGENTS.md` for detailed development guidelines.
For detailed info, refer to this project [subject](docs/en.subject.pdf).
## 🚀 Getting Started
### Prerequisites
- GCC compiler
- Make utility
- Unix-like system (Linux, macOS, WSL)
### Install prerequisites
- APT
```bash
sudo apt install build-essential libreadline-dev
```
- Pacman
```bash
sudo pacman -Sy base-devel readline-devel
```
## 🔧 Build
1. **Clone the repository:**
```bash
git clone https://github.com/sdevsantiago/minishell.git
cd minishell
```
2. **Compile the project:**
```bash
make # Full compilation
```
3. **Clean build files:**
```bash
make clean # Remove object files
```
#### Available Make Targets
| Command | Description |
|---------|-------------|
| `make` | Compiles all |
| `make all` | Same as `make` |
| `make clean` | Remove object files (*.o) |
| `make fclean` | Remove object files and binaries |
| `make re` | Clean and rebuild everything |
## 👨‍💻 Usage
### Basic Usage
INSTRUCTIONS
## 📏 Norminette
The code strictly complies with 42's **Norminette v4**:
```bash
norminette *.c *.h
```
More info in the official [Norminette](https://github.com/42school/norminette) repository.
## 🙇‍♂️ Special thanks
- [lrcouto](https://github.com/lrcouto) and [ayogun](https://github.com/ayogun) for creating and publishing, respectively, the [42-project-badges](https://github.com/ayogun/42-project-badges) repository.
- [gcamerli](https://github.com/gcamerli) for creating the [42unlicense](https://github.com/gcamerli/42unlicense) repository.
## ⚖️ License
<div align="center">
<a href="./LICENSE">
<img src="https://img.shields.io/badge/License-42_Unlicense-red?style=for-the-badge&labelColor=black">
</a>
</div>
**This work is published under the terms of [42 Unlicense](LICENSE).** This means you are free to use, modify, and share this software.