Bash Shell

Job Control

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

Startup

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

Piping

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

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

Prelude

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: http://redsymbol.net/articles/unofficial-bash-strict-mode/

General Style

Google has a style guide: https://google.github.io/styleguide/shell.xml

Shellcheck is a lint tool: https://www.shellcheck.net/

http://redsymbol.net/articles/unofficial-bash-strict-mode/