Thanks for happening upon our project, Shell! Shell was inspired by Ken Thompson and the initial UNIX Shell. Felicia and I started development with the goal of creating a very basic shell that has similar functionality to the Thompson and bash shells, but we're each planning on forking this current project and developing our own individual sets of additional, domain-specific functionality that you will not be able to find on many of the shells that are currently out there in the ether. However, before forking to work on our own separate projects, we'll be adding more features and bug fixes to the current repo in order to realize to a "Minimum Viable Shell" (MVS).
For those interested in what happens when a typical shell executes a command typed by the user in the terminal, check out this blog post.
- Ubuntu 14.04 LTS
- gcc 4.8.4 (-Wall, -Werror, -Wextra, and -pedantic flags)
gcc -Wall -Werror -Wextra -pedantic *.c -o hsh
Commands are currently executed just like they are in sh, bash, and other common shells.
To start Simple Shell in interactive mode, run the command below:
./hsh
To start Simple Shell in non-interactive mode, echo
the command or cat
the pseudo-random file you want to run and pipe the standard output into Simple Shell:
echo "ls -l" | ./hsh
The commands that you can use right now with Shell are indicated with a checkmark. The ones that aren't are left unchecked. Of course, the builtins provided aren't the only builtins we plan on implementing. The usage of these commands are similar to that of sh, bash, and many of the most commonly-used shells.
- Builtins
- exit
- env
- pwd
- cd
- setenv
- unsetenv
- help
- history
- $PATH Commands
We may currently have a functional shell where you can use several builtins and commands found in the directories listed in the PATH environment variable, but we are definitely not yet done with our "Minimum Viable Shell." Below are the tasks we would like to accomplish before forking this project and creating our own domain-specific shells.
- Fix current memory leaks
- Add better memory management
- Handle commands separator (
;
) - Handle logical operators (
||
,&&
) - Handle aliases
- Handle variable replacement
- Handle the
$?
variable - Handle the
$$
variable - Handle comments
- Handle many of the common shell builtins
If you as a developer would like to fork our current project and create your own domain-specific shell, feel free to use a testing suite that we created to compare the output and errors of our/your shell with that of sh's.
Shell is owned and maintained by Kiren Srinivasan (@srinitude) and Felicia Hsieh (@feliciahsiehsw). You can reply to us and to @holbertonschool on Twitter for more updates on this project and our forked projects.
Shell is released under the MIT license. See LICENSE for details.