This project was carried out in team with cfontain who built the lexer and the parser as well as several built-in.
Authorized functions for the assignment: readline, rl_clear_history, rl_on_new_line, rl_replace_line, rl_redisplay, add_history, printf, malloc, free, write, access, open, read, close, fork, wait, waitpid, wait3, wait4, signal, sigaction, sigemptyset, sigaddset, kill, exit, getcwd, chdir, stat, lstat, fstat, unlink, execve, dup, dup2, pipe, opendir, readdir, closedir, strerror, perror, isatty, ttyname, ttyslot, ioctl, getenv, tcsetattr, tcgetattr, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs
Code written in accordance with 42 C coding style.
Minishell is a minimalist Linux Shell written in C able to handle the following features:
- pipes
- redirections such as >, <, and >>
- heredocs with expand option
- command with arguments
- environment variables
We implemented the single quote and double quote management, however, it does not interpret unclosed quotes or special characters such as \ (backslash) or ; (semicolon).
We implemented the following built-in:
- cd with absolute and relative path or no argument
- echo with option -n
- pwd without option
- env without argument or option
- export without option
- unset without option
We used a linked list and a lexer to build tokens that we then sent to a parser. The ouput of the parser is a command tab that can be executed accordingly. The environment is a linked list that allows us to add and remove variables easily. This linked list is converted to a table that can be sent to the execution functions.
This project was a great opportunity to better understand the shell, and to discover how parent and child process work as well as fds and environment of execution.