Minishell is a shell program written in C that provides a simplified command-line interface for executing commands and managing processes. It aims to replicate basic functionalities of a Unix shell, such as command execution, I/O redirection, piping, and handling of environment variables. The subject of the project can be found in this link.
- Language: C
- Norm: The project must adhere to the Norm, a set of rules and coding conventions.
- Dependencies: The project can use external libraries such as
readline
for line editing capabilities. - Memory Management: Proper memory allocation and deallocation should be ensured to prevent memory leaks.
- Makefile: A Makefile should be included, providing rules to compile the project with required flags and dependencies.
- Separate Compilation: The Makefile should not relink, and the project should be organized into multiple files if necessary.
- Bonus: Additional features or functions can be implemented as bonuses, but they will be evaluated separately.
- Prompt: Minishell displays a prompt to indicate it is ready to accept commands.
- History: The shell maintains a history of previously executed commands.
- Command Execution: Minishell searches for and launches the appropriate executable based on the
PATH
variable or using a relative/absolute path. - Quoting: Minishell handles single quotes (
'
) and double quotes ("
) to prevent interpretation of metacharacters within the quoted sequence. - Redirection: The shell supports input (
<
) and output (>
) redirection, as well as appending output (>>
) to a file. It also supports here documents (<<
) with a delimiter. - Pipes: Minishell implements pipes (
|
) for connecting the output of one command to the input of another. - Environment Variables: The shell expands environment variables (e.g.,
$VAR
) to their corresponding values. - Special Variables: Minishell expands
$?
to the exit status of the most recently executed foreground pipeline. - Signal Handling: The shell handles signals such as
ctrl-C
,ctrl-D
, andctrl-\
as expected. - Built-in Commands: Minishell provides several built-in commands:
echo -n
: Prints arguments to the standard output without a trailing newline.cd
: Changes the current working directory to the specified path.pwd
: Prints the current working directory.export
: Sets or exports environment variables.unset
: Unsets environment variables.env
: Prints the environment variables.exit
: Exits the shell.
The Minishell repository consists of the following files:
Makefile
: Makefile for compiling the project.*.h
: Header files containing function prototypes and necessary definitions.*.c
: Source code files containing the implementation of various features and built-in commands.
To compile the Minishell project, run the following command:
make
This will generate an executable named minishell
.
To launch the shell, run the following command:
./minishell
Once the shell is running, you can enter commands and utilize the supported features.