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/