A surprisingly powerful Unix shell
Go TeX
Permalink
Failed to load latest commit information.
bin Formatting. Aug 28, 2016
doc Update syntax documentation. Jul 31, 2016
img Rearranging. May 5, 2015
lib Changes to please golint. Aug 28, 2016
pkg Reduce visibility where possible. Aug 28, 2016
LICENSE License: MIT Jun 21, 2016
README.md Changes to please golint. Aug 28, 2016
main.go Refactor task package; create system package. Jul 18, 2016
version.go Update for Go 1.5. Aug 25, 2015

README.md

A surprisingly powerful Unix shell

Oh is a Unix shell. If you've used other Unix shells, oh should feel familiar.

gif

Where oh diverges from traditional Unix shells is in its programming language features.

At its core, oh is a heavily modified dialect of the Scheme programming language, complete with first-class continuations and proper tail recursion. Like early Scheme implementations, oh exposes environments as first-class values. Oh extends environments to allow both public and private members and uses these extended first-class environments as the basis for its prototype-based object system.

Written in Go, oh is also a concurrent programming language. It exposes channels, in addition to pipes, as first-class values. As oh uses the same syntax for code and data, channels and pipes can, in many cases, be used interchangeably. This homoiconic nature also allows oh to support fexprs which, in turn, allow oh to be easily extended. In fact, much of oh is written in oh.1

For a detailed comparison to other Unix shells see: Comparing oh to other Unix Shells

Installing

With Go 1.5 or greater installed,

go get github.com/michaelmacinnis/oh

(Oh compiles and runs, but should be considered experimental, on Windows.)

Using

For more detail see: Using oh

License

MIT


1. ^ Currently, 364 of 6334 lines of code are written in oh with an additional 859 lines of Go generated by 175 lines of oh.