News for hackers. Stuff that matters.
Re:Ask HN: Let's build Checkstyle for Bash? by Etheryte on Sunday February 20, 2022 @08:09AM (#30405380)
Out of pure curiosity, in what context do you write sufficient amounts of Bash scripts that style checking is a worry that needs your attention? While I also write small one-offs or bootstrap scripts here and there, in most cases it's my experience that developers opt for other languages for anything beyond small snippets.
Re:Ask HN: Let's build Checkstyle for Bash? by nickjj on Sunday February 20, 2022 @08:52AM (#30405664)
Every web application I work with has this idea of a "run" script[0], basically a self isolated shell script to help automate running certain commands. Sort of like a Makefile except with the full power of your shell.

For example: https://github.com/nickjj/docker-flask-example/blob/main/run

In a bigger project this file tends to grow quite large, even when you have the power of a programming language available to you there's plenty of tasks where it makes sense to keep it as a shell script. Now imagine you work on a team where other folks want to contribute new functionality, it's important to have automated tools to help stick with a consistent style, just like you would want to use Black with Python.

The run script for my infrastructure repo at one place I work for is almost 1,500 lines of shell scripting that's broken up into many small functions. It's not a big jumbled mess either, it's very organized and optimized to make running long commands faster and less error prone (even if they happen to be called in CI). These functions are mostly calling out to Terraform and other tools too, it's not 1,500 lines because of long winded cloud CLI tool API calls or anything like that.

[0]: https://nickjanetakis.com/blog/replacing-make-with-a-shell-s...

Re:Ask HN: Let's build Checkstyle for Bash? by brimstedt on Sunday February 20, 2022 @08:21AM (#30405463)
What do you use the; if you want:

- Self contained in one file

- Easily edited with vi/nano (i.e. through a console ssh session)

- Readily available on most Linux base installations

- No crazy runtime installation requirements

Edit: formatting)

Re:Ask HN: Let's build Checkstyle for Bash? by hnlmorg on Sunday February 20, 2022 @09:52AM (#30406131)
If it is for myself: murex (my own DevOps focused shell: https://murex.rocks)

If it is for work: either Bash or whatever that companies preferred software development language (over the last ~20 years that's included: Pascal, Visual Basic, PL/SQL, Perl, PHP, Python, Typescript and others I've likely forgotten. Different companies will have different preferences)

If performance matters then these days Go is my "goto" language because it's a good compromise in terms of developer productivity and application performance. But I've used Java, C and C++ too. Depending on the particular problem I'm trying to solve.

...and if you ask me again in 5 years then the answer will be completely different again.

The sort answer is: there's no such thing as a single answer. Everyone will have their own preferences and business requirements.

Re:Ask HN: Let's build Checkstyle for Bash? by kodah on Sunday February 20, 2022 @12:18PM (#30407274)
Some context to my statements: I'm a SWE that works on infrastructure services and tooling, primarily on Linux but also Unixes.

It depends on what I'm doing but usually Go if an application requires any longevity at all.

I use Python or Java for things that require more dynamic typing. The main usecase here is big data or to prototype applications.

Bash I usually reserve for very small tasks. When I bootstrap services in containers, you'll usually find some Bash. A whole CLI written in Bash? I would not approve that PR. Bash lacks variable scoping for the most part, the ways in which you can implement it are hacky and non-obvious. Bash's syntax and the way it behaves varies by system, even installer scripts have to account for this. As I'm typing this, I realize the Bash code I write generally follows the same testing and constraints as the Makefiles I write.

I don't think I really understand the requirement for "a single document". This departs from programming practices I've built up over the years. When I come across large multi-thousand LOC documents (in any language, much less Bash) I'm usually concerned.

Re:Ask HN: Let's build Checkstyle for Bash? by brimstedt on Monday February 21, 2022 @12:21AM (#30412235)
About the requirements and "single document":

Those tasks that I use bash for are usually one-offs, and live on the server they are used on.

Thus, it should be easy for the next admin/Dev to find it and understand/fix/extend it.

Of course, if there is a more advanced task those requirements fall short and there should be a proper Dev env with source control, tests, etc.

Re:Ask HN: Let's build Checkstyle for Bash? by kodah on Monday February 21, 2022 @12:11PM (#30418085)
Ah, makes total sense. I was conflating the single document requirement with the original post which was seemingly trying to build a CLI tool.
Re:Ask HN: Let's build Checkstyle for Bash? by neoromantique on Sunday February 20, 2022 @08:57AM (#30405697)
python.
Re:Ask HN: Let's build Checkstyle for Bash? by ducktective on Sunday February 20, 2022 @10:13AM (#30406302)
Which python? 2.7 that is symlinked to `python` on the distro? 3.5 that is installed by default? or perhaps you meant 3.9 but what about that cool library that you're gonna use which is only available for 3.9.2 and not 3.9.1 due to a bug?

How are you gonna handle installing that beautifulsoup dependency in a way that does not bork the OS python deps?

Are you gonna use `python -m venv` or `poetry` or `pipenv`?

Re:Ask HN: Let's build Checkstyle for Bash? by drran on Sunday February 20, 2022 @08:59AM (#30405718)
perl
Re:Ask HN: Let's build Checkstyle for Bash? by neoromantique on Sunday February 20, 2022 @09:25AM (#30405931)
Not my cuppa, but I'd take it over bash any day
Re:Ask HN: Let's build Checkstyle for Bash? by cmckn on Sunday February 20, 2022 @01:41PM (#30408112)
I think linters are just as helpful for 10 lines as they are for 1000. I (try to) use style checks and formatters for anything and everything I version-control, especially when there’s more than one person working on it concurrently.
Re:Ask HN: Let's build Checkstyle for Bash? by zinekeller on Sunday February 20, 2022 @08:12AM (#30405403)
Largely same sentiment. Pure POSIX shell scripts for embedded systems, sure, but I'm not sure if there is a niche that requires Bash scripting. Not discouraging these efforts of course but I'm not sure that it'll be worth it.
Re:Ask HN: Let's build Checkstyle for Bash? by amelius on Sunday February 20, 2022 @08:15AM (#30405424)
The niche is installer scripts. Because there is one certainty: Bash is available everywhere.
Re:Ask HN: Let's build Checkstyle for Bash? by fjorde on Sunday February 20, 2022 @08:54AM (#30405679)
zinekeller's point notwithstanding, i agree that "installer scripts" is really the last necessary domain of the bash script. If you need a (semi)portable script to get `python` to run your python script, you can't use python, obviously.

Things like docker images and nix builds are sold as huge improvements on this chicken-egg problem, at least from a "keep it all in one language" perspective, but only if you consider a docker script (mostly bash) or a nix config truly not the same thing as a shell script that more or less initiates the same environment.

docker/nix abstraction layers have advantages but aren't always as portable as a shell script. If you need a docker engine, I think you'll still need a bash script to install that...

Nix is possibly even more "single command", often just a curl if i'm not mistaken, but still requires config and shipping a build somewhere, and you still need to run the `curl` command in a shell somehow. i don't see how "just use python" will ever fix the init chicken-egg problem.

Re:Ask HN: Let's build Checkstyle for Bash? by zinekeller on Sunday February 20, 2022 @08:22AM (#30405472)
> Bash is available everywhere

POSIX mistake number 1: Bash isn't available everywhere, even when restricted to Linux. Even Debian avoids bash for a good reason (Bash is slower than most POSIX shell implementations), although it's installed by default for convenience.

Re:Ask HN: Let's build Checkstyle for Bash? by drran on Sunday February 20, 2022 @09:01AM (#30405732)
> Even [on] Debian ... it's installed by default for convenience.

:-/