The goal of this project is to build a simple shell interpreter which behaves similar to common shells including bash and csh. The project has been divided into parts. Some skeleton code has been provided. Much of the provided code uses C style data structure.
Part 1 involves writing a scanner and parser for your shell using the open source versions of Lex and Yacc (Flex and Bison). Part 1 is mostly completed.
Part 2 involves adding features that make the shell more useful and featured.
For example, Ctrl-C will need to be implemented. In many other shells, you can type Ctrl-C to stop a running command. If Ctrl-C is typed when no command is running, the current prompt is discarded and a fresh prompt is printed. As-is, your shell will simply exit when Ctrl-C is typed and no command is running. The implemented shell will need to behave as csh does with respect to Ctrl-C.
Other features that will need to be implemented into the shell are Exit. When Exit is called, the shell will be exited.
Subshells will also need to be implemented. Sometimes a user will need to run a complex command that uses the output from one shell command as the input of another.
Part 3 of the project involves adding a few more major features to the shell. You will allow for the parser to expand a few types of input, handle wildcards, and implement a line editor that allows you to do things like fixing typos and traversing a history of previously submitted commands.
Please feel free to message to get the full scope of this small project.
I've done a shell interpreter for another project implementing command interpretation, I/O redirection and pipes. It interpreted LS, EXIT and CD commands internally. It can be improvised for your project.