Skip to content

A nutty shell implemented in C++ (School project)

Notifications You must be signed in to change notification settings

remicmacs/nutsh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔩 nutsh

Build Status License CRAPL Code size GitHub release

Built for Linux Built for MacOSX Made with C++ Works on my machine

Pronounced « nutshell » (/ˈnʌtʃel/)

drawing

Asciinema

✨ Features

nutsh is barely usable ! Enjoy using your system the hard way ! With nutsh, become a truly hardcore Linux guru ! After all if it's painless, is it really worth it ? (hint: it's not).

Here is some of the most notable features :

  • Command history
  • File autocompletion
  • Command expansion
  • Cool name
  • Really fast (thanks to almost no unnecessary features)

🏁 Getting started

A build script is available for Arch Linux. For any other cases, please follow the instructions below.

📦 Build dependencies

  • make
  • g++
  • readline

🤡 make for dummies

  1. Clone the repo

    git clone https://github.com/remicmacs/nutsh.git
  2. Get in the clone repo

    cd nutsh
  3. Build the shell with make

  4. Voilà !! 🎉

🐧 Compilation on Debian systems

On Debian and Ubuntu systems you can build the project like this :

  1. Install needed software

    apt install libreadline-dev unzip build-essential
  2. Dowload the source

    wget https://github.com/remicmacs/nutsh/archive/master.zip
  3. Decompress and step into directory

    unzip master.zip
    cd nusth-master
  4. Launch compilation with make

    make
  5. That's it ! 🎉

⚙️ Builtin commands

Here is a list of shell builtin commands implemented in nutsh.

Command name Takes arguments Has options Status
cd ✔️ ✔️
pwd ✔️
exit ✔️
echo ✔️ ✔️
type ✔️
export ✔️ ✔️ ✔️

📝 Documentation

Some (very basic) documenation is provided. Most of it is inline in the source.

Specifications are provided. They are in French, as required by the assignment. A lot of it is not yet implemented, but might be one day if we feel like it.

Anyone wanting to have a broader look at this project should build the docs with doxygen and the provided configuration :

doxygen doxygenrc

HTML docs would then be accessible with docs/html/index.html being the entrypoint.

The documentation is far from perfect but it helps.

📫 Contact us

You can get in touch with the dev team in a really straightforward way :

  1. Fork the repo
  2. Obfuscate your message
  3. Hide it in the source with steganography technics of your liking
  4. Make a Pull Request
  5. PR is ignored during an indefinitely long amount of time
  6. Lose all hope
  7. You don't want to get in touch anymore
  8. Success : it was a school project anyways!

⁉️ What the hell is this versioning scheme ?

This is a new versioning scheme we invented that we're calling revolver (for revolution - version). It is based on calver but it uses the Holocen calendar for the year and the French Republican calendar for the month and day. If you plan to release more than a version in a day, you can add a revision number by appending the current time in decimal time.

As an example, this is the version of the first release :

12019.07.26-0870
──┬── ┌─ ┌─ ─┬──
  │   │  │   │
──┴─ ─┘ ─┘ ──┴───────────
2019-04-16T20:52:00+02:00

We can deduce the release date, in the standard ISO time:

Fragment Conversion
12019 12019 - 10000 = 2019 AD
07 (Germinal) 04 (April)
26 (Lilas) 16 (Saint Paterne)
0870 (08h70) 8 * 2.4 = 19h 12min
70 * 1.44 = 1h 40min
Total : 20h 52min

Or in a simpler way : 12019.07.26-0870 = 2019-04-16T20:52:00+02:00.

About

A nutty shell implemented in C++ (School project)

Resources

Stars

Watchers

Forks

Packages

No packages published