#!/bin/bash

function fail {
  echo $1 >&2
  exit 1
}

function retry {
  local n=1
  local max=3 # 3 retries before failure
  local delay=5 # delay between retries, 5 seconds
  while true; do
    echo "Running command '$@' with retry, attempt $n/$max"
    "$@" && break || {
      if [[ $n -lt $max ]]; then
        ((n++))
        sleep $delay;
      else
        fail "The command has failed after $n attempts."
      fi
    }
  done
}

if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    retry "$@"
fi