$ man tshabbic.projects.sish
SISH(8)sish - a simple shellSISH(8)
Name

sish -- a simple shell

Synopsis

sish [ -x] [ -c command]

Description

[See the Source Code!] [See the actual Manual Page!]


This simple shell project goes significantly beyond the scope of traditional hand-written shell assignments typically found in undergrad; using CS 392 - Systems Programming's "minishell" assignment at Stevens Institute of Technology as a reference, sish encompasses everything and more, with most notable additions including but not limited to: backgrounding of processes, token expansion, several special values such as $!, $? and $$, I/O redirection, and pipelining of multiple processes.

Naturally the two most significant challenges for this project where process piplining, and writing the lexer and parser. Otherwise the assignment was relatively straight forward.
Usage

-c command

Execute the given command.

-x

Enable tracing: Write each command to standard error, preceded by '+'.

Bugs

> Various parsing related oversights: e.g.: ls | should error, ls & echo $! should either error, or work as if the & was placed at the end, etc.

> int n = snprintf(sish_path, sizeof(sish_path), "%s/%s", cwd, progname); makes the assumption that the path to the shell itself is within the current working directory.

Unsuccessfully cd-ing will improperly set the success of the last command ($?) to 0 to indicate success as opposed to a non-zero value. This was not deemed an issue when the assignment was evaluated.

History

This was the final project for CS 631 - Advanced Programming in the Unix Environment @ Stevens Institute of Technology and was done during Fall 2025.