cr4sh_ (pronounced crash, because it crashes all the time) is a UNIX mini-shell implemented with Rust. This shell is a great for educational purposes. You can learn about Linux system, processes, stdio, signals and much more.
You can follow blog posts which I wrote while building this shell:
- Systems Programming with Rust (Part 1)
- Systems Programming with Rust (Part 2)
- Systems Programming with Rust (Part 3) <<-- comming soon
Currently, cr4sh_
provides the following functionality:
- Multiprocessing
- SIGINT and SIGKILL signal handling
- Execution of OS executables
- Redirection of standard input & output
- Appending stdout to the file
- Piping commands and combining with redirection
cd
command to change directoriestouch
for creating files and updating accessed & modified dates&&
calls to chain multiple commands
To run the cr4sh_
shell copy following code in your terminal:
git clone https://github.com/bexxmodd/cr4sh_.git && \
cd cr4sh_ && \
cargo run
Currently I'm looking to add other custom shell functions (which are listed in the TODO list) and if you want to contribute looking into the `customs` directory inside the `src` directory is a great start. If you want just add any of the functionality and I'll take of gluing with the rest of the program. Also, if you have design skills some 80's style logo can be a great contribution!
Main priority right now is to add cursor and history function.
- Create a logo
- Allow piping of the commands
- Add personalized color printing of the terminal user
- Allow execution of local executables properly
- Allow chain of commands when
&&
is supplied - Handle append (
>>
) directive - Handle
&
symbol to send command as a background process - Expend signal handling capabilities
- Implement cursor to handle arrow, home, end keyboard inputs and cursor movement
- Usage of Tab to autocomplete commands and file/directory names
- Implement
touch
function: - Implement
history
function - Implement
dot/source
function - Implement redirection for custom functions:
- add additional argument to functions for stdout file
- Implement piping for custom functions
- Add customization of colors and style for a shell-name