A program written in C that emulates the basic functionalities of a UNIX shell.
- Edgar Guerrero
- Gabriel Romanini de Barros
- Lucas Smith
- Responsibilities: Make function that displays terminal prompt including user, machine, and home environment variables.
- Assigned to: Edgar Guerrero, Lucas Smith
- Responsibilities: Making sure any arguments representing environment variables are replaced by their actual values.
- Assigned to: Edgar Guerrero, Lucas Smith
- Responsibilities: Expanding any tildes in command arguments into the home environment variable.
- Assigned to: Gabriel Romanini de Barros, Edgar Guerrero
- Responsibilities: Given a command entered by the user in the CLI, search through the path environment variable to find whether the command exists and, if so, facilitate the process of executing it through system calls on parts 5 and 9.
- Assigned to: Gabriel Romanini de Barros, Lucas Smith
- Responsibilities: Create a child process and, in that child process only, use a system call to execute the command entered by the user.
- Assigned to: Gabriel Romanini de Barros, Lucas Smith
- Responsibilities: Implement input and output redirection.
- Assigned to: Edgar Guerrero
- Responsibilities: Support up to 2 pipes, supporting the simultaneous execution of up to 3 commands.
- Assigned to: Lucas Smith
- Responsibilities: Allow commands to run in the background if users desire, periodically updating users on the status of the program and notifying them when it is done running.
- Assigned to: Gabriel Romanini de Barros
- Responsibilities: Allow for execution of internal commands. Unlike external commands they must be executed by the parent process. The internal commands supported are cd, jobs, and exit.
- Assigned to: Edgar Guerrero, Gabriel Romanini de Barros
- Responsibilities: Achieved shell-ception functionality. A running instance of our program can exist inside another running instance, and the only limitation of how many instances one can "nest" is system resources.
- Assigned to: Edgar Guerrero, Gabriel Romanini de Barros
shell/
│
├── src/
│ ├── proj1.c
│ └── lexer.c
│
├── include/
│ └── lexer.h
│
├── README.md
└── Makefile
- Compiler: gcc 13.2.1
For C:
makeRun this in the "shell" folder. This will build the executable in the 'bin' folder. You may run it from that folder or follow the directions on the 'Execution' section below.
make runRun this in the "shell" folder. This will compile AND run the shell.
- Extra Credit 1: We have "shell-ception" functionality, so the user can nest an indefinite number of running instances of the shell inside of each other.
- The bin and obj folders are not in our repository since git won't keep track of empty folders. However, when the user executes the "make" or "make run" commands the folders will be created automatically and its appropriate contents will be placed inside of them.