This group project is about creating a simple shell.
Just like bash, but a little bit smaller.
The goal was to learn how the system handles processes, file descriptors and signals.
I also learned how to lexically analyze plain input text into seperate word-tokens and recursively parse those tokens into an abstract syntax tree. Abstract syntax trees are data structures widely used in compilers to represent the structure of program code. I used it to represent the structure of any given shell input command.
minishell has the following builtins to offer:
echo: display a line of text (e.g. echo hello world)
env: prints the environment
exit : causes process termination
export: set the export attribute for variables (e.g. export key=value)
pwd : print working directory
unset : unset values and attributes of variables
The shell can also...
- browse through command history with up and down keys
- search and launch the right executable based on the
PATHvariable - handle single quotes
- handle double quotes
- redirect input
command < input - redirect output
command > output - handle heredocs
command << delimeter - redirect and append output
command >> output - pipe output
command_1 | command_2 - expand environment variables
echo $HOME - expand last exit status
echo $? - handle ctrl-C, ctrl-D and ctrl-\ like in bash
$ make$ ./minishell