21 lines
864 B
Markdown
21 lines
864 B
Markdown
# Coding guidelines for Bash / shell scripts
|
|
|
|
- Write all shell scripts for modern Bash — use Bashisms like `&>` and `[[ ... ]]` whenever possible.
|
|
|
|
## Avoid "Bash strict mode"
|
|
- By default, don't set any options at the top of the script.
|
|
- Add `set -u` globally if the script becomes complex enough (rough guideline: more than 4 variables).
|
|
- Use `set -o pipefail` only locally when needed.
|
|
|
|
## Executable scripts
|
|
If a script is directly executable, it should:
|
|
- have no file extension
|
|
- use `#!/usr/bin/env bash`
|
|
|
|
If a script is not directly executable, it should have a ".bash" file extension and no shebang line (when possible).
|
|
|
|
## Style guide
|
|
|
|
- Avoid spaces after redirection operators: `>/dev/null`, `2>&1`, `&>"$logfile"`
|
|
- When logging to stderr, prefer to place the `>&2` redirection immediately after the command name: `printf >&2 %s "Blah blah..."`
|