01 Languages & frameworks

Bash

Already installed on every machine you will ever be asked to fix.

Role
Shell & glue
Licence
GPL v3
Since
1989
Upstream
Project site ↗

Bash is unfashionable and it is not going anywhere. It is on every server, in every container and in every rescue shell, and it is the first thing available at three in the morning when something is wrong.

Why we still choose it

For glue code, being available everywhere matters more than elegance. A deployment hook, a backup rotation, a restore test or a health check written in Bash runs anywhere without a runtime to install, and whoever is on call can read it regardless of what other languages they know.

It also makes for an easier handover. A client who inherits fifty lines of Bash can maintain them. If the same logic is written in a framework they do not use, they will probably end up replacing it.

How we write it

Carefully, because Bash punishes carelessness. Every script we hand over starts with set -euo pipefail, quotes its variables, uses trap for cleanup, and is checked by ShellCheck in CI like any other lint. We keep scripts short as a matter of policy; once one grows past a page of logic, we rewrite it in Ruby.

Where it falls short

As a general-purpose language Bash is bad. Arrays are awkward, error handling is a convention rather than a feature, and the quoting rules have ended careers. We use it for glue and orchestration, keep it small, and move to a proper language as soon as data structures are involved.

Nästa steg

Tell us what you are running.
We will tell you what it should be.

A first conversation costs nothing and takes forty minutes. You will leave it with our opinion of your stack, which is occasionally that you should change nothing at all.