#!/bin/env sh _repeat() { local start=1 local end=${1:-80} local str="${2:-=}" local range=$(seq $start $end) for i in $range; do echo -n "${str}"; done } _header() { local length="$1" echo -n "/=" _repeat ${length} "=" echo "=\\" } _value() { local value="$1" echo -n "| " echo -n ${value} echo " |" } _footer() { local length="$1" echo -n "\\=" _repeat ${length} "=" echo "=/" } display() { local value="$1" _header ${#value} _value "${value}" _footer ${#value} } runfile() { local command="$1" local commandName=$(basename $command) local prompt="Do you wish to run $commandName? [Ynq]" local display="Executing $commandName" local promptLength=$((${#prompt})) local displayLength=${#display} local maxWidth=$((promptLength > displayLength ? promptLength : displayLength)) _header ${maxWidth} read -p "| $prompt |" -n 1 -r -s echo if [[ $REPLY =~ ^[Nn]$ ]]; then _footer ${maxWidth} return fi if [[ $REPLY =~ ^[Qq]$ ]]; then _footer ${maxWidth} display "Exiting..." exit 0 fi echo -n "| $display" _repeat $((maxWidth - displayLength)) " " echo " |" _footer ${maxWidth} if ! "$command"; then echo "Error: bootstrap '$command' failed" >&2 exit 1 fi }