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.

This port of busybox might also suit your needs: https://github.com/rmyorston/busybox-w32