Bash Shell

Job Control

The syntax for “job number” or “JOBSPEC” (when using kill or similar) is %4 or %5.


bash by default takes a very long time to initialize because the auto-completion scripts are loaded multiple times; disable this in ~/.bashrc?


You can pipe both stdout and stderr together either to a file or two another command::

grep --asdf >& /some/file
grep --asdf |& less


I frequently add a one-line version of the following to shell scripts:

set -e              # fail on error
set -u              # fail if variable not set in substitution
set -o pipefail     # fail if part of a '|' command fails

Note that join, grep, and others sometimes exit non-zero return codes on purpose (eg, pipe input closed or found no matches, as expected), which makes life difficult. Sometimes || true is enough to get around this.

More on this:

General Style

Google has a style guide:

Shellcheck is a lint tool: