Skip to content

The Simple Shell is a simple UNIX command interpreter written entirely in C.

Notifications You must be signed in to change notification settings

ecaoili24/simple_shell

 
 

Repository files navigation

Simple Shell

Synopsis

The shell project is a cumulative and comprehensive project in the Holberton curriculum. The project tests everything we have learned about the C programming language, our ability to work as a team, our skills at planning for a long term project, our talent, and grit.

Description

The Simple Shell is a simple UNIX command interpreter written entirely in C. The program runs based on bash commands obtained from the input stream by the user. Any text seperated by a single space is considered to be an argument. The respective command typed by the user is then executed as if in a UNIX shell.

To learn more about how the Shell works, here is our published article on The Startup via Medium: The Command Line with ls -l

Requirements

  • Allowed editors: vi, vim, or emacs
  • All files were compiled on Ubuntu 14.04 LTS
  • Programs and functions were compiled with gcc 4.8.4 using the flags -Wall -Werror -Wextra and -pedantic
  • All files should end with a new line
  • Code should use the Betty style. It is checked using betty-style.pl and betty-doc.pl
  • No more than 5 functions per file
  • All header files should be include guarded
  • System calls are only used when needed

Compilation

gcc -Wall -Werror -Wextra -pedantic *.c -o hsh

List of Allowed Functions & System Calls

Function and/or System Call Description
access check real user's permissions for a file
execve execute program
exit cause normal process termination
fflush flush a stream
fork create a child process
free free dynamic memory
getline delimited string input
isatty test whether a file descriptor refers to a terminal
malloc allocate memory
perror print a system error message
read read from a file descriptor
strtok extract tokens from strings
wait wait for process to change state
write write to a file descriptor

Usage

The shell works like this in interactive mode:

$ ./hsh
##---> /bin/ls
hsh shell.c path.c README.md
##---> ls -l
-rwxrwxr-x 1 vagrant vagrant 14136 Nov 24 21:42 hsh
-rw-rw-r-- 1 vagrant vagrant   863 Nov 24 21:42 shell.c
-rw-rw-r-- 1 vagrant vagrant   784 Nov 24 01:02 path.c
-rw-rw-r-- 1 vagrant vagrant  1449 Nov 22 23:48 README.md
##---> pwd
/home/vagrant/simple_shell
##---> exit
$

The shell works like this in non-interactive mode:

$ echo "/bin/ls" | ./hsh
hsh shell.c path.c README.md test_ls
$
$ cat test_ls
/bin/ls
/bin/ls
$
$ cat test_ls | ./hsh
hsh shell.c path.c README.md test_ls
hsh shell.c path.c README.md test_ls
$

Built-Ins

The simple shell has support for the following built-in commands:

Command Definition
env Prints the environment
exit Exits the shell

The Program Flow of Our Shell

Image of Flowchart

Authors

Ariana Bibiano

Erika Caoili

Robert Deprizio

About

The Simple Shell is a simple UNIX command interpreter written entirely in C.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 100.0%