mmichaelis
11/2/2015 - 7:33 AM

Template with some convenience settings for bash scripts.

Template with some convenience settings for bash scripts.

#!/usr/bin/env bash

set -o nounset
set -o pipefail
set -o errexit
### Uncomment to enable debugging
#set -o verbose
#set -o xtrace

declare -r BOLD="$(tput bold)"
declare -r DIM="$(tput dim)"
declare -r NORMAL="$(tput sgr0)"
declare -r SMUL="$(tput smul)"
declare -r RMUL="$(tput rmul)"
declare -r LRED="${BOLD}$(tput setaf 1)"

function realpath() {
  $(type -p greadlink readlink | head -1) -f "${@}"
}

declare -r MY_CMD="$(realpath "${0}")"
declare -r MY_DIR="$(dirname "${MY_CMD}")"
declare -r MY_REALNAME="$(basename "${MY_CMD}")"
### In help texts we might want to show the name the user used to call this script rather than
### its real name.
declare -r MY_NAME="$(basename "${0}")"

### Outputs an Error Message
function error() {
  local msg

  while read -r msg; do
    echo "[ERROR] ${msg}" 1>&2
  done
}

function warn() {
  local msg

  while read -r msg; do
    echo "[WARN] ${msg}"
  done
}

function info() {
  local msg

  while read -r msg; do
    echo "[INFO] ${msg}"
  done
}

function parse_cli() {
  echo "Parse CLI here." | info
}

function main() {
  parse_cli "${@}"
  
  echo "An error message" | error
  echo "A warning" | warn
  cat <<HELP | info
Some Multiline-
Help-Text
HELP
  cat <<COLORS | info
${BOLD}${LRED}COLORED${NORMAL}${BOLD} OUTPUT${NORMAL}

       ${BOLD}${MY_NAME}${NORMAL} ${SMUL}command${RMUL}

       ${BOLD}${MY_NAME}${NORMAL} [${SMUL}options${RMUL}] ${SMUL}command${RMUL}

       ${BOLD}${MY_NAME}${NORMAL} [-h | --help]
COLORS
}

main "${@}"