I want a better shell but only in that I want a Bash-like language (with builtin Linux userland programs like mv, cp, etc.) that works across macOS, Linux, and Windows. (I cannot reliably get Bash for Windows installed on every Windows device I own.)
I want this for cross-platform build scripts. I build a desktop app for Windows, mac and Linux. I don't want a different set of scripts in a different language for each platform.
And I don't want to write in Python or JavaScript or Ruby or Perl because they're all so much more verbose than Bash.
But Bash on its own isn't enough either. I need the same Linux userland commands to work the same way on Windows. Powershell has mv and cp but they don't work the same way or have the same flags.
I hacked together a version of this language in Python that operates line by line and massages the differences between things like mv and environment variables in Windows, macOS, Linux.
https://github.com/multiprocessio/datastation/blob/master/sc...
Here's a sample script it can run:
yarn
setenv UI_ESBUILD_ARGS "--minify"
yarn build-ui
prepend "window.DS_CONFIG_VERSION='{arg0}';" build/ui.js
yarn build-desktop
prepend "global.DS_CONFIG_VERSION='{arg0}';" build/desktop.js
yarn electron-packager --overwrite --out=releases --build-version={arg0} --app-version={arg0} . "DataStation Community Edition"
zip -r releases/{os}-{arch}-{arg0}.zip "releases/DataStation Community Edition-{os}-{arch}"
But this is a massive hack. So I'm starting work on a real language that supports a reasonable subset of Bash on Windows, macOS, and Linux and brings a reimplementation of the few key Linux userland commands (mv, cp, mkdir, rm plus new programs like append, prepend, replace, etc.) built into the interpreter.A sketch of this more real version implemented in Go is here: https://github.com/multiprocessio/crosh. It doesn't build at all yet but if you're interested you can follow along.