But yes, in theory, that might be nice! There's also the Python-powered shell, Xonsh, which I can't use either.
1 way to do things - not sure what you mean. It's a general purpose language, if you dont like something there's probably a different library that may do it the way you like (eg, don't like exceptions, use a library that mimics rust style Result values; don't like oop, don't do oop, functional programming is certainly possible in python), or easy enough to start creating your own private utility libraries that do things your way.
Xonsh was okay. Idk if I'd use it again. I'd probably just use python to invoke external cli programs using subprocess. I used xonsh for scripting before. I recall it having a slightly slow start up - I launch shell frequently so that's a no-go for me to use as my default shell.
---
And I looked at alternative scripting languages. Racket, D (has a single file script mode), ocaml, etc. Honestly python seemed good enough, even with its warts, especially with uv to manage deps without a whole formal project needing to be setup for a script. Stwp up from bash. Most of my use cases are fine with argparse + subprocesses + a unix shebang at the top + "chmod +x", with uv handy if I need a external library.
https://docs.racket-lang.org/zuo/index.html
Zuo is used to build Racket. It can be distributed as a single C file, which makes it extremely to integrate in new projects.
As comments here suggest, lua isn't much of a bash replacement. Happy to hear your alternatives and suggestions for bash.
You have to reinvent the wheel every other day since the standard library doesn't come with much included
If you're stuck with the standard library (hello gsub!) and the application-specific library is an incoherent collection of functions, you're going to have a really bad time. That's the case too often because it's easier to plug the VM into an existing program than it is to create bindings that are not painful to use.
OTOH a well thought out environment makes you forget you're programming in Lua.
Just terrible standard library
I'm sure there are plenty of libraries out there to rectify those issues, though.
You'll need a glob function, cd/getcwd/setcwd, pretty-printer. That's about it.
Lua stdlib replaces sed, awk, grep, cut, tr, tail, etc.
Startup time is the best. In my testing, a lua script that functions like `echo` runs faster than echo.
this is kind of hilarious
lua must be severely optimized at this point
the reason why it took so long is I use nixos and nix-darwin and... well, you know... it was non-obvious how to get everything working together "because Nix" but with the help of a good LLM I figured it out.
HOLY HELL IS THIS FAST.
i had the brand new chatgpt 4.1 rewrite a name=value pretty-printer terminal function from elixir (which I used because it was easy and maintainable, but at the cost of the VM startup) to lua.
272ms for the elixir version (`env | name-value-to-table`) vs. 17ms for the Lua version (`env | name-value-to-table-lua`). WOW. 1/16 the time LOL.
anyway here is that rewrite https://gist.github.com/pmarreck/47e110cbc62ea6603a0e61543d2...
Guess I'm gonna have to keep this in my toolkit! (And now that I figured out the Nix, it will remain easy!) Thanks!