| > all of these languages do a really good job of being super simple to use when you quickly need to automate something... It's ease of writing that is being optimized for, not reading/maintenance. I think of shells as being optimised for/excellent at: - Invoking subprocesses (managing buffers, propagating signals, handling exit codes, etc.) - Standard input/output redirection (pipes, file reading/writing, etc.) - Command line interaction - Being installed by default (on Unix-like systems, anyway) They also have some nifty string handling, but as you say it's quite messy compared to other languages. Some other languages have reasonable commandlines and are usually available by default (e.g. Python), but the majority of languages are awful at the first two points (e.g. I wrote an example at https://news.ycombinator.com/item?id=17733865 ). This is why there are many libraries which try to improve the situation, like 'sh.py' and 'plumbum' for Python, 'Shelly' and 'Turtle' for Haskell, Scala's 'process' package, 'shell-pipeline' for Racket, etc. > I don't know of any other s-expression language targeting that space? Others have mentioned some. I really like scsh (Scheme shell), there was a nice paper about it posted to HN recently ( https://news.ycombinator.com/item?id=17886714 ). The shell-pipeline package mentioned above is really nice, and usable from Racket (a variant of Scheme, which uses s-expressions by default). |