xiringuito/helpers/wait_for
2017-07-14 07:34:56 +02:00

58 lines
1.1 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Waits TIMEOUT seconds, makes probes every second, until COMMAND returns
#
OUTPUT=/dev/null
if [[ "${DEBUG}" == "true" ]]; then
set -x
OUTPUT=/dev/stderr
fi
function die(){
[[ "${WAIT_VERBOSE}" == "true" ]] && echo
echo "[ ERROR ]"
echo "${@}"
exit 1
}
function signal_progress(){
[[ "${WAIT_VERBOSE}" == "true" ]] && echo -n "="
}
function success(){
[[ "${WAIT_VERBOSE}" == "true" && ${WAIT_TIME} -gt 0 ]] && echo "|"
exit 0
}
[[ ${#} -ge 3 ]] || die "Usage: wait_for true|false TIMEOUT COMMAND"
[[ ${1} == "true" || ${1} == "false" ]] || die "'true' or 'false' for the first argument please!"
declare -r RESOLUTION=${1}; shift
declare -r TIMEOUT=${1}; shift
declare -r COMMAND="${@}"
WAIT_TIME=0
while [[ ${WAIT_TIME} -lt ${TIMEOUT} ]]; do
bash -c "${COMMAND}" >${OUTPUT}
RETVAL=${?}
if [[ "${RESOLUTION}" == "true" ]]; then
[[ ${RETVAL} -eq 0 ]] && success
else
[[ ${RETVAL} -ne 0 ]] && success
fi
sleep 1
let WAIT_TIME+=1
signal_progress
done
if [[ "${RESOLUTION}" == "true" ]]; then
FAIL_STATE=fails
else
FAIL_STATE=succeeds
fi
die "\"${@}\" still ${FAIL_STATE} after ${TIMEOUT} seconds"