As part of our Operating Systems course, our team has ambitiously crafted an advanced shell emulator. This project focuses on sophisticated job control and system call integration, specifically tailored for Linux environments.
Our team, consisting of three dedicated members, is utilizing the C programming language for development. We leverage the robustness of the GNU Compiler Collection (GCC) and the efficiency of the GNU Make build automation tool. To ensure the reliability and stability of our shell emulator, we are also employing the Valgrind and GNU Debugger tool for meticulous memory debugging. An integral part of our development process is the continuous integration (CI) pipeline, hosted and managed via GitHub Actions.
- Overview
- Authors
- Project Architecture
- Visual Previews
- Getting Started
- Usage Instructions
- Testing
- Debugging
This project presents a sophisticated shell emulator, meticulously crafted in C for Linux systems. It's tailored for academic purposes, showcasing robust features like advanced job control and seamless system call integration.
- Navigation: Change directories using
cd
. - Directory Display: Show current directory with
pwd
. - Exiting the Shell: Use
exit
to terminate the shell session. - Status of Last Command: Query using
?
. - External Command Execution: Seamlessly run external commands.
- I/O Redirections: Comprehensive redirection capabilities including
<
,>
,>>
,>|
,2>
,2>>
,2>|
. - Job Management: List jobs with
jobs
, support for background execution using&
, and job termination withkill
.
- Command History: Efficient logging of command history for easy recall.
- Job Control: Detailed management of foreground and background processes.
- Input/Output Redirection: Redirect standard input/output with ease.
- Piping: Facilitates the chaining of commands through piping.
- Signal Handling: Robust management of system signals for process control.
- Enhanced Job Control Options: Introducing additional controls for job management.
- Extended Command Set: Inclusion of commands like
fg
(foreground) andbg
(background). - Advanced Piping Support: Further development of piping functionalities.
- Redirection Expansion: Broader options for input/output redirections, especially in conjunction with piping.
Executing an External Command: Date
Complex Substitution With Pipes
- Operating System: Linux-based or use Docker (Dockerfile provided).
- Required Tools & Packages:
- Clone the Repository: First, clone the repository to your local machine.
- Compilation: Open your terminal and navigate to the cloned repository's directory. Compile the project by executing:
make all
- Running the Shell Emulator: To start the shell, enter the following command in your terminal:
make run
- Cleaning the Project: To remove all compiled files, use:
make clean
- Running Tests: For testing, execute:
make test
This will run the provided test suite to ensure everything is functioning correctly.
- GNU Debugger: To debug the shell emulator using GDB, execute:
make gdb