> On Aug 12, 2016, at 2:41 PM, ra...@openmailbox.org wrote: > > Hello! > > GNU Bash is 138227 lines of code. I wrote a simpler shell* in 800 lines: > https://notabug.org/rain1/s/ > > *It is not a true POSIX shell. You can't run existing scripts with it. It's > technically just a command interpreter. > > With that out the way here's an overview of how it works: > > Tokenization [tokenizer.c]: Instead of the strange and complex way that > normal shells work (where "$X" is different to $X for example) s works by a > strict tokenize -> variable expansion -> parse -> execute pipeline. This > makes it much easier to program with and less likely for scripts to break > simply because your CWD has a space in it. > > Variable expansion [variables.c]: The expander supports both $FOO and ${FOO} > syntax, it just resolves environment variables. > > Parsing [parser.c]: There are just 3 binary operations |, && and || and '&' > optional at the end of a line. There is no "if" or looping or anything. > parser.c is 85 lines of code and uses my region [region.c] based allocator to > simplify teardown of the structure when it needs to be free'd. > > [interpreter.c] The interpreter is a simple recursive process that walks the > AST, creating pipes and forking off children. > > [supporting/*.c] Instead of redirection operators like <, > and >> being part > of the language they are simply provided as supporting programs that should > be added to the $PATH: < is basically just cat. The redirection operators are > all packaged together in busybox style. Similarly glob is not part of the > language, it is a 20 line script instead. You use it like this: glob rm *py > > [builtins.c] Of course a shell cannot do everything by external tools - so > the builtins cd, source, set, unset are provided (and treated specially by > the interpreter). > > It can run scripts you supply, shebang works, using it in a terminal > interactively works. In theory enough for practical every day use. > > Except for the low linecount (it is even smaller than execline) and > simplicity of the lexical aspect of the shell language it does not have > strong benefits over existing shells (especially since it is not POSIX > compatible) but I hope that the code may be interesting or refreshing to > others who are unhappy with the excess of bloat most software has. > >
I think it's pretty cool. There are some interesting shortcuts, like the redirection and glob not as built-ins, and trying to be just a shell and not a scripting language. It also seems to have a consistent ideology behind it, in a good sense.