Skip to content

Minishell is a 42 school team project to create a basic shell program in C. It implements redirections and pipes, as well as environment variables and some builtin commands.

mcombeau/minishell

Repository files navigation

minishell

Minishell 42 project badge

Minishell is a 42 school team project to create a basic shell program in C. It implements redirections and pipes, as well as environment variable expansions and the cd, echo, env, exit, export, pwd and unset builtin commands.

Status

Validated 11/11/2022. Grade: 99%.

Usage

Clone the repository with the minitester submodule:

git clone --recurse-submodules git@github.com:mcombeau/minishell.git

To compile:

cd minishell && make

To run the program:

./minishell

A prompt will appear. You may enter your commands to be executed.

To run the included tester:

cd minitester/ && bash minitester.sh

Supported Features

Minishell is a miniature shell program based on Bash. Minishell supports:

  • Prompt display
  • Command history (up and down arrows)
  • System executables available from the environment (ls, cat, grep, etc.)
  • Local executables (./minishell)
  • Builtin commands :
    • echo (and option -n)
    • cd (with only a relative or absolute path)
    • pwd (no options)
    • export (no options)
    • unset (no options)
    • env (no options or arguments)
    • exit (with exit number but no other options)
  • Pipes | which redirect output from one command to input for the next
  • Redirections:
    • > redirects output
    • >> redirects output in append mode
    • < redirects input
    • << DELIMITER displays a new prompt, reads user input until reaching DELIMITER, redirects user input to command input (does not update history)
  • Environment variables (i.e. $USER or $VAR) that expand to their values.
    • $? expands to the exit status of the most recently executed foreground pipeline.
  • User keyboard signals:
    • ctrl-c displays a new prompt line.
    • ctrl-d exits minishell
    • ctrl-\ does nothing

However, Minishell does not support \, ;, &&, ||, or wildcards.


Useful Resources for the Minishell Project

🇺🇸 Articles in English about the concepts tackled in this project:

🇫🇷 Articles en français sur les concepts abordés dans ce projet :

Other useful links:


Made by aquesada and mcombeau