This project contains multiple implementations of UNIX shells. The goal of this project is to build a JIT-compiled shell, that allows the user to send complex data structures through the pipeline (as opposed to bash and other popular UNIX shells).
Well, most shells today are interpreters. The infamous bash, with all its limitations, remains king of shells. While most users are satisfied with bash, we wanted to push things a little further. A compiled shell, like Elvish, leverages real-time compiler JIT (just-in-time) to provide the same REPL feel users are used to.
Bash is great, for most people. When dealing with larger pipelines, bash often runs into IO bottlenecks. Why? Well, resources. But not only that. Users can only pass text through bash pipelines, with no ability to forward complex data structures and streams. Enter shell, a retake on many modern shells, compiling your commands, running them for you, and bringing the terminal a step closer to your heart.
Installation is as simple as can be. First step is to clone the repo.
git clone https://github.com/walidabualafia/shell.git
Once you have the repo handy, you can compile and run the C
implementation.
cd shell
make
./shell
If you want to run the Go
implementation, you can either compile it, or test it by running the Go
interpreter:
cd shell/go
# To compile
go build
./shell
# To run
go run shell.go
The shell will also be implemented in Rust
by March 1st, 2024.
-
Decide on the main language to implement the shell
-
Compile list of important commands to reimplement
-
Analyze Elvish commands and whether anything can be inherited from Elvish
-
Create a clear roadmap section with visual cues
Contributions are always welcome!
See contributing.md
for ways to get started.
Please adhere to the license policy.