# `bash` tips/tricks/HOWTOs
## HOWTO: Read exit status
You can just do things like:
if cp $1 $2 ; then
echo succeeded
else
echo failed
fi
Alternatively, $? holds the exit status of the most recently executed
command.
## TIP: Command substitution
`command`
or
$(command)
## TIP: Redirection
To redirect stdout to /dev/null, and stderr to the tty:
$ tidy index.html 2>/dev/stdout 1>/dev/null
## TIP: Parameter expansion
${foo}
or
$foo
## TIP: `$FUNCNAME` contains the current function name
The `$FUNCNAME` variable is set to the name of the function while the
function is executing. (i.e. like `$0`, except the name of the
function, rather than the name of the script.)
## TIP: `$BASH_SOURCE` contains the current filename
If you want to discover the real path of the current filename (i.e.
after resolving symbolic links), use `readlink`:
echo $(readlink $BASH_SOURCE)
Note that `$BASH_SOURCE` is actually an array, but when treated as a
scalar, it returns the first element of the array.
## HOWTO: Perform conditional variable assignment
If `$1` exists, assign `$CONFIGROOT` its value, otherwise set
`$CONFIGROOT` to `$HOME/.config`:
CONFIGROOT=${1:-$HOME/.config}
## TIP: `sudo !!`
Repeats the last command under `sudo`.
## HOWTO: In a shell script, ensure a temporary file is deleted
TEMPFILE=$(mktemp)
trap "rm -rf $TEMPFILE" EXIT
`$TEMPFILE` will be removed in almost all circumstances when the shell
exits, including Ctrl-C.
## HOWTO: Display current/existing keybindings
bind -P
The escape sequences are defined as follows:
\C- control prefix
\M- meta prefix
\e an escape character
\\ backslash
\" literal "
\' literal '
You can also use `TAB` for the tab character. (May or may not be the
same as `\t`, below.
In addition to the GNU Emacs style escape sequences, a second set of
backslash escapes is available:
\a alert (bell)
\b backspace
\d delete
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\nnn the eight-bit character whose value is the octal value nnn (one to
three digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one
or two hex digits)