Minishell is a simplified version of bash developed as part of the main curriculum for Hive Helsinki. It provides basic shell functionality, including executing commands, managing environment variables, and handling input/output redirection.
- Execute commands and display the output.
- Handle basic shell built-in commands.
- Handle environment variable expansion.
- Support input/output redirection (<, >, <<, >>).
- Implement basic signal handling (Ctrl-, Ctrl-C).
- Implement EOF handling (Ctrl-D).
- Basic error handling and error messages.
- Support for handling multiple commands using pipes.
Requirements:
- Using an Intel-based MacOS system, can work on other systems using some tweaks.
- Readline installed using brew in
~/.brew/opt/readline
directory. - Any C toolchain installed ( clang, gcc, ... ).
- GNU Make installed.
To use Minishell, follow these steps:
- Clone the repository:
git clone https://github.com/mxafi/minishell.git
- Change to the project directory:
cd minishell
- Compile the source code using
make
:
make
- Run the Minishell executable:
./minishell
Minishell provides a command-line interface where you can enter commands and execute them. It supports various features and built-in commands similar to bash.
Here are some examples of how to use Minishell:
$ ls -l # Execute the "ls" command with the "-l" option
$ echo Hello World # Print "Hello World" to the console
$ cd /path/to/dir # Change directory to "/path/to/dir"
$ export VAR=123 # Set the environment variable "VAR" to "123"
For more details on supported commands and features, please refer to the Supported Commands section.
Minishell supports the following built-in commands:
- cd with only a relative or absolute path
- echo with option -n
- pwd with no options
- export with no options
- unset with no options
- env with no options or arguments
- exit with no options
Additionally, Minishell can execute external commands by searching for them in the directories listed in the PATH
environment variable.
Contributions are welcome! If you would like to contribute to Minishell, please follow these steps:
- Fork the repository.
- Create a new branch for your feature or bug fix.
- Make the necessary changes and commit them.
- Push your changes to your forked repository.
- Submit a pull request to the main repository.
Please ensure that your code follows the project's coding style and conventions.