I’ve been struggling with a rather complex shell script, and it’s becoming apparent that Bash might not be the best choice for this particular task. While I usually gravitate towards statically typed languages like Go or Rust, I’ve noticed that many people recommend alternative languages such as Lua or Python for scripting tasks.

I’m curious to know your opinions and experiences with scripting languages for larger or more intricate shell scripts. Have you ever encountered a situation where Bash just didn’t cut it, and if so, which scripting languages did you turn to for a more effective solution? Are there any specific languages you found particularly suitable for debugging, testing, or handling complex logic in your shell scripts?

  • nous@programming.dev
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

    for larger or more intricate shell scripts

    Those are call applications. Use any language you like. If go/rust is what you know use them. I use rust all the time for things beyond run a bunch of commands and tends to be my go to when I need to process data in any way.

  • Nyfure@kbin.social
    link
    fedilink
    arrow-up
    1
    ·
    1 year ago

    If the script gets too large or you think it will, write a full program.
    With languages like python or go its not that hard either and you get alot of benifits aswell.

    Other than that, use whatever languwge works and you know.

  • snowe@programming.devM
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    Really surprised no one has mentioned Ruby. It’s installed by default on almost every system out there (unlike python), it will have the same features on every platform (unlike python where you might get 2.7 or 3.x depending. It’s simple and easy to read, and only slightly more verbose than bash. It’s very well suited for scripting (please don’t use it for application work). It also took a lot of its design from Perl, which a bunch of people are mentioning in this thread, and as a result has a ton of the features of perl, along with a ton of features from other languages. Rust is heavily based on Ruby’s design, and i’ve used Rust to create cli programs and I wouldn’t recommend it. It’s good, but most cli programs don’t need the difficulty of rust for the benefits that rust gives.

    Anyway, python has a really really good cli library called Click, but that’s about the only good thing about it. If you are looking to use this script on multiple systems then Ruby will be much easier to transfer between systems (it will just work). I’ve deployed complex python, rust, and ruby CLIs across an org and Ruby was the only easy one. Rust was second easiest, Python absolutely terrible.

    If you’re not deploying this to other platforms or sharing it across a team or something like that then a lot of the downsides and upsides here don’t really matter. Just use the easiest language.

    • Gopher Protocol@programming.dev
      link
      fedilink
      English
      arrow-up
      0
      ·
      1 year ago

      Rust is heavily based on Ruby’s design

      I would not say “heavily based”. Literally only the closure/lambda syntax, which is cosmetic. Rust is mainly inspired by ML-family languages and C++.

      I think Ruby is a reasonable choice for small scripts which someone might otherwise use Python for. But Rust is very well suited to more complicated or long-lasting command-line tools, especially if performance is at all a concern. Clap alone is super nice, but there are a lot of awesome libraries for making rich CLI tools easily.

      And like…a hundred more I could mention. Idk, for anything that’s not completely trivial, which will be used and maintained by humans and not thrown away, Rust is really nice.

      • snowe@programming.devM
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        I would not say “heavily based”. Literally only the closure/lambda syntax, which is cosmetic. Rust is mainly inspired by ML-family languages and C++.

        All of Cargo is based on (and created by) the same person that created bundler for ruby. That list also misses out on a lot of things, like !, automatic returns, honestly most of the actual language ‘design’ rather than the internals (that seems to be a list of where the architects got their ideas for internal implementation as well, rather than just the readability of the language).

        But Rust is very well suited to more complicated or long-lasting command-line tools, especially if performance is at all a concern. Clap alone is super nice, but there are a lot of awesome libraries for making rich CLI tools easily.

        I disagree. Like I said, I wrote command line apps in all of these, performance was a factor. But a much larger factor is getting other devs on your team to contribute. And that was just absolutely impossible with Rust. The learning curve is just too high. For something that isn’t a hobby project, but that you might need a team member to roll out a fix in just a few hours, Rust will not cut it.

        Yes, you will have way more bugs in all the other programs, but honestly I had a shit ton of bugs in my rust cli as well, because, it turns out, rust works really well when it has control over everything, but man does it suffer when you have to interface with the real world… And oh boy did that make it incredibly difficult to write. Like I said, I deployed CLIs in all three of these languages. Ruby was the easiest of them all. Not just in development, but also maintenance.

    • swordsmanluke@programming.dev
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Aw man, you can’t write all that and then not give an example!

      Ruby makes scripting drop-dead simple. You can run any shell command by surrounding it with back ticks.

      # simple example, just grab files: 
      files = `ls`.split("\n")
      
      # pipes work inside back ticks
      files.map {|f| `cat #{f} | grep "can I use grep w/out cat"`}
        .compact
        .each { |match| puts match }
      # easy to build a pipeline on the data in ruby, too! 
      

      That’s it! No messing around with popen3, or figuring out pipes or signals. Those are there too if you really need them, but if you just wanna write a quick script with a less arcane syntax - try Ruby!

      • snowe@programming.devM
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        Haha sorry, I wrote it all on my phone while traveling. and yeah, if you’re running just shell commands it looks almost the exact same as a bash script, and then when you need actual scripting capabilities you get them.

  • lxkota@lemmy.ml
    link
    fedilink
    arrow-up
    0
    ·
    1 year ago

    For years my go to (after Bash) was Python. However, in the last few years I’ve switched to Rust for any kind of shell command wrapper or CLI tool.

    TL;DR I think Rust is best suited to more complex CLI work.

    • Prosperoh@jlai.lu
      link
      fedilink
      arrow-up
      0
      ·
      1 year ago

      Would you have any example (not necessarily yours) to showcase this? I mean, how is it better suited than say, C++?

      • miniu@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

        Not op, but I feel the same as them.

        Compared to C++, Rust has a very good toolchain and libraries. With C++ setting up a project that has dependencies is… painful. I’m a full-time C++ programmer with over 8 years of experience and if I didn’t have to, I would never choose it for something new.

        With Rust creating a new project and adding dependencies is trivial. There are a lot of great libraries and the ease with which you can use them is very empowering.
        Clap and serde are super powers for CLI programs 😀

        For smaller scripts that don’t yet “deserve” full rust treatment, I now use nushell for personal projects.

        • TechNom (nobody)@programming.dev
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 year ago

          I too use Rust for what normal people use shell scripts for. But I have a feeling that Rust is falling into the same trap that other languages with similar easy dependency management fall into (Python and NPM are good examples). You end up with a dozen direct dependencies and hundreds of indirect ones with dozens of levels of hierarchy. C and C++ programs have fewer dependencies because each additional one adds more headache for the developer. Drew Devault’s Hare language is giving language repo and package manager a skip for the same reasons. And I’m starting to think that he may have a point.

          • philm@programming.dev
            link
            fedilink
            arrow-up
            0
            ·
            edit-2
            1 year ago

            I think it’s not that bad yet, when comparing with npm. Usually the dependencies I use are of very high quality. But I’m also very selective with dependencies. I’m rather writing a simple part myself, than using a not-really maintained low-quality dependency…

            Btw. I have not looked into the Hare language yet (will do that now), but if it’s similar as deno, I won’t like it. You want to have some kind of package management IME…

            • philm@programming.dev
              link
              fedilink
              arrow-up
              1
              ·
              1 year ago

              Drew Devault’s Hare language

              Ok, they say “use your distros package-manager”, that’s basically asking for the same disaster as C or C++. I think cargo is one of the selling points of Rust.

              At least say something like we use “Nix” for default package-management (which does a lot of things right)…