What Is a Shebang Line? Choosing the Interpreter
A shebang line is the first line of a script, starting with #! , that tells the operating system which interpreter should run the file.
When you run a script directly, the operating system needs to know what program should interpret it: Bash, Python, Node, or something else. The shebang line answers that. It is a small but important detail that decides which shell or interpreter, and therefore which features, your CI script gets.
What a shebang looks like
It is the very first line and begins with the two characters #! followed by a path, for example #!/bin/bash or #!/usr/bin/env python3. The OS reads it when you execute the file directly.
How it is used
When you run ./script.sh, the kernel sees the shebang, launches the named interpreter, and hands it the file. Without a shebang, the OS may fall back to the default shell, which might not be what you intended.
env-based shebangs
#!/bin/bashpoints at a fixed path to Bash.#!/usr/bin/env bashfinds Bash via PATH, which is more portable.#!/usr/bin/env python3does the same for Python interpreters.
Why the shebang matters
The shebang decides whether your script runs under sh or bash, which changes which features are available. A script using Bash arrays will break if its shebang resolves to a plain POSIX shell.
Shebangs in CI
CI often invokes scripts explicitly (bash deploy.sh), which overrides the shebang. But when steps call a checked-in script directly, the shebang controls the interpreter, so getting it right keeps local and CI runs consistent.
Consistency on managed runners
Latchkey runners provide the interpreters at predictable locations, so a #!/usr/bin/env bash shebang resolves the same way every run. That keeps directly executed scripts behaving the same in CI as on a developer machine.
Key takeaways
- A shebang is the first line of a script naming the interpreter to use.
- Using
#!/usr/bin/env bashfinds the interpreter via PATH for portability. - The shebang decides which shell features a directly executed script gets.