Skip to content

amateomi/karashi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kara is basic Linux shell, indeed

image

About The Project

The main purpose of this project is a curiosity in system programming. I was using such shell giants as zsh and fish with abnormal amount of features. So I decided to deep dive on this topic. As the result Kara was born, minimalistic usable Linux shell.

Implemented Features

  • execution of different programs
  • two builtin commands: cd, exit
  • redirecting keyboard signals such as ^C to current execution processes instead of shell
  • I/O redirecting via <, > and 2> for programs
  • piping via | symbol
  • expansion ~ to home directory path
  • reading environment variables with $ symbol (echo $USER will print current user instead of $USER)
  • commands history and input processing with emacs bindings are implemented with GNU readline library

Getting Started

Kara is Linux shell, and I didn't try to run in on macOS or FreeBSD, but you free to do it and leave messages in the issues section.

Dependencies

Kara depends on the GNU readline library. I suspect that any version is fine. Also, you'll need git, gcc and make, which are preinstalled on most Linux distributions.

Ubuntu:

sudo apt install libreadline-dev

Fedora:

sudo dnf install readline readline-devel

Arch:

sudo pacman -S readline

Installing

git clone https://github.com/amaom1/karashi.git
cd karashi
make && sudo make install

Uninstalling

In karashi directory enter that command:

sudo make uninstall

Now Kara is not installed in your $PATH and you free to delete repository too.

Tests

Kara provides some kind of overview of what it is capable of. To run it just enter that command after building project:

make test

Documentation

Kara provides auto-generated documentation via Doxygen. If you are interested in the project structure but don't want to view the source code, you can check out the documentation on the GitHub pages.