My Projects > TurtleShell

TurtleShell is a not especially good Linux shell written entirely in Golang. This project is a coding experiment, and isn't actually meant for use by anyone.

The Objective of Turtleshell

One of the best ways I've found to learn a programming language is to create a passion project in it, and learn the language as you write and iterate the codebase for that project.

TurtleShell is a coding experiment to create a full Linux shell in Go, as a way to learn Go and at the same time scratch an itch that I've had for some time -- to learn how to write a Linux shell. Two figurative birds, one project.

TurtleShell is nominally based on the functionality (not the design) of BASH, however I've made changes to the workflow and functionality to fit my own preferences. Changes include:

  • Builtin commands that make more sense in plain English.
  • Easier and more readable customization of shell prompts.

My primary purpose in creating TurtleShell was to better learn Golang, because I find that it is much easier to learn a language when you're actively engaged in a codebase involving that language. By learning Golang through coding TurtleShell I am able to actively make mistakes, seek out the more correct ways of doing things, and continuously iterate TurtleShell into something I can be proud of.

Please note: while I am willing to entertain issues and enhancement / feature requests, I am not willing to accept merge requests for this project. I will happily read your code to improve my understanding and credit you accordingly, but the merge request will be deined and my own interpretation of your code will be committed.

Current Features

  • The ability to envoke system commands and binaries.
  • The mechanisms to create and use shell builtin commands.
  • The ability to read arbitrary configuration crom ~/.turtlerc files.
  • The ability to customize the turtleshell prompt, which updates in real time using the shell.

Planned Features

  • Setting environment variables.
  • Command history with select-and-execute functionality.
  • Script running (way in the future).