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)