Skip to content

A compact, C-developed shell emulator with advanced job control and system call integration, optimised for Linux environments.

Notifications You must be signed in to change notification settings

mathusanm6/Job-Control-Shell-Emulator

Repository files navigation

Job Control Shell Emulator

Job-Control-Shell-Emulator

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.

Table of Contents

  1. Overview
  2. Authors
  3. Project Architecture
  4. Visual Previews
  5. Getting Started
  6. Usage Instructions
  7. Testing
  8. Debugging

Overview

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.

Key Commands and Functionalities

Essential Commands

  • 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 with kill.

Advanced Features

  • 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) and bg (background).
  • Advanced Piping Support: Further development of piping functionalities.
  • Redirection Expansion: Broader options for input/output redirections, especially in conjunction with piping.

Visual Previews

Job Control Shell
Job Control Shell


Basic Prompt View
Basic Prompt View


Listing Files
Listing Files


Executing an External Command: Date
Executing an External Command: Date


I/O Redirections
I/O Redirections


Jobs
Jobs


Complex Substitution With Pipes
Complex Substitution With Pipes

Getting Started

System Requirements

Installation Guide

  1. Clone the Repository: First, clone the repository to your local machine.
  2. Compilation: Open your terminal and navigate to the cloned repository's directory. Compile the project by executing:
    make all

Usage Instructions

  • 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

Testing

  • Running Tests: For testing, execute:
    make test

This will run the provided test suite to ensure everything is functioning correctly.

Debugging

  • GNU Debugger: To debug the shell emulator using GDB, execute:
    make gdb

About

A compact, C-developed shell emulator with advanced job control and system call integration, optimised for Linux environments.

Topics

Resources

Stars

Watchers

Forks

Languages