why?

Because bash feels clunky to write and work with for anything non-trivial, especially compared to other scripting languages.

Why not another scripting language (no compile necessary)?

Because bash and sh are installed nearly everywhere. Any other scripting language means the user is required to have that installed, and that is far less likely to be the case.

If I could write my scripts in a nice syntax, but be sure my users will be able to use it effortlessly by distributing to them compiled versions, then that would make both of our lives easier!

Thoughts? Are there any languges that do this?

@forked_bytes@lemm.ee
link
fedilink
English
311Y

There is Batsh, a simple language with c-style syntax that compiles to bash and batch.

Martin
link
fedilink
141Y

Why not use a compiled language that compiles to fat binaries (rust, go etc)?

Dark Arc
link
fedilink
English
6
edit-2
1Y

It’s worth noting any compiled language can make a “fat” binary (e.g., C++), you just need to use static linking.

Just use Python. If you absolutely need it on every system use go and compile it down to a binary.

Hate this because most bootstrapping I do is within a Dockerfile where I don’t want to install the entire runtime and its dependencies just to complete a build step.

The way I used to solve this problem back in the day was with a statically compiled Perl binary.

Although it doesn’t crosspile to bash, I think a good middle ground is bitfield/script. Basically you can do many things you would normally script very simply with nice syntax and distribute a binary.

Evan Hahn
link
fedilink
61Y

https://github.com/tdenniston/bish is one such language.

I’d also recommend Shellcheck which helps prevent many problems with shell scripts.

Doesn’t powershell do this? I’ve been learning powershell, and they keep making a tech agnostic claim along these lines, but I haven’t tested it on Linux yet.

Not quite - even in PowerShell 7 there are some features that only work on Windows and Windows only comes with PowerShell 5.1 by default.

I used it on a Mac and on Windows, for me it feels very modern when compared to bash (although I never was a bash expert).

However, the problem is that it’s not installed by default on Linux (at least on most distros as far as I know) and Mac, and Windows machines might have an outdated version which you’ll have to take into account.

So unfortunately it doesn’t meet OP’s criteria that it should “just work” without installing an interpreter.

@bob_wiley@lemmy.world
link
fedilink
English
51Y

deleted by creator

I haven’t used it, but this node package looks enticing

Unfortunately shell script is not as portable as you might be anticipating. Different distro run different shells, with different settings, and also different tools. Think BSD grep vs GNU grep.

I discovered a fun one the other day: there is literally no way to represent word-boundary anchors that’s valid in both GNU sed and BSD sed. https://unix.stackexchange.com/a/393968/38050

z3bra
link
fedilink
2
edit-2
1Y

That’s what the POSIX spec is for. BSD and GNU commands may differ, but they both support what’s specified by POSIX. By limiting your calls to it, you can write portable script with no problem (I’ve been doing that for the last few years without issue).

Scott
link
fedilink
English
8
edit-2
1Y

I’ve seen multi distro scripts that are also able to bootstrap their own assets for each distro/architecture. Don’t see why you wouldn’t be able to check that considering /etc/os-release exists in pretty much every unix like environment.

And having it run on a specific shell type could also be an option.

neil
link
fedilink
55
edit-2
1Y

python is usually the next step up in admin land

python is a pretty standard install on linux systems since so many things like you’re talking about use it

Not only that it’s basically everywhere, but even if it’s not, you can compile it using something like nuitka and still use it.

Huh, why doesn’t python just ship this? Managing python installs is annoying as hell.

I would guess mostly because python interpretes are just about everywhere.

Also the binaries compiled with nuitka end up being much bigger in size. A simple script of a few kb can and up in the hundreds of mb when you start compiling the dependencies, so it’s not a perfect solution.

This is about python packaging, like making/getting libraries/apps rather than compiling binaries, but it’s pretty relevant here:

https://chriswarrick.com/blog/2023/01/15/how-to-improve-python-packaging/

Python or Perl. IIRC, I’ve seen systems with a Perl install by default, but not Python.

I don’t see why bash would be used at all here. If you want something that doesn’t need another interpreter, then just compile a binary.

Cyclohexane
creator
link
fedilink
81Y

Possible use case: scripts that are found in a codebase for doing… Codebase things. Like setting up dev environment for example.

But then building it still requires whatever scripting tool you use. Including the bash-ified version would not for practice, as it wouldn’t be very human readable and would have to be kept in sync with the source script. It’s much cleaner and simpler to just require python for your build environment.

Match!!
link
fedilink
English
21Y

That’s a use case for Docker

adr1an
link
fedilink
31Y

look into devenv.sh for that constrained use-case

There’s always Golang which compiles to an x86 binary. But that’s probably not what you want since you probably want something readable and editable on the end system.

Why not another scripting language (no compile necessary)?

But you’re describing compiling that new language to bash…

Cyclohexane
creator
link
fedilink
51Y

Yes, I’m answering why I am not taking a completely other scripting language

In other words, I am making the case for a compiled language by answering the question of why i am not considering a language that doesn’t need it.

Is transpiling a form of compiling?

Yes, that’s where it’s name comes from!

AItoothbrush
link
fedilink
English
121Y

Giga brain move: make a bash script that compiles some c code then runs it

Still requires the compiler though.

I don’t have a good answer, but I’ve embedded python in bash scripts before after having the bash script install python. Take that as you will.

This thread reminds me of stackoverflow, most people are just convincing you in something else and it is obvious they have never been in your (and mine) situation.

Just answer question if you have some idea, yes we know python exist, that’s nice, but not an answer to this question.

Natanael
link
fedilink
11Y

IMHO the closest real existing thing is compilers to WASM and then using a JavaScript engine, possibly a JavaScript engine which can run in bash (like that ridiculous hack below, lmao)

neil
link
fedilink
-221Y

Knock off the childish fucking gatekeeping and go back to reddit. It’s what the wider industry uses.

Pyro
link
fedilink
English
111Y

It’s perfectly acceptable to not want to use a certain tool.

You would be the kind of person on SO to reply to a question saying “how do I do A” with “nobody does A, do B instead”. That’s not constructive.

It absolutely can be constructive. The reason people respond that way on SO is because it is genuinely common for people to think they need something because they’ve misinterpreted the core problem they have.

Create a post

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person’s post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you’re posting long videos try to add in some form of tldr for those who don’t want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



  • 1 user online
  • 1 user / day
  • 1 user / week
  • 1 user / month
  • 1.11K users / 6 months
  • 1 subscriber
  • 1.21K Posts
  • 17.8K Comments
  • Modlog