#!/usr/bin/env bash # Common functions for the lab scripts # Copyright 2021 Bryan C. Roessler # Don't run this script directly [[ "${BASH_SOURCE[0]}" == "${0}" ]] && exit 0 ask_ok() { read -r -p "$* [y/N]" response response=${response,,} [[ ! "$response" =~ ^(yes|y)$ ]] && return 1 return 0 } is_root() { user=$(whoami) [[ $user != "root" ]] && echo "Script must be run with sudo rights!" && exit 1 } if ! type -t readarray >/dev/null; then readarray() { local cmd opt t v=MAPFILE while [ -n "$1" ]; do case "$1" in -h|--help) echo "minimal substitute readarray for older bash"; exit; ;; -r) shift; opt="$opt -r"; ;; -t) shift; t=1; ;; -u) shift; if [ -n "$1" ]; then opt="$opt -u $1"; shift fi ;; *) if [[ "$1" =~ ^[A-Za-z_]+$ ]]; then v="$1" shift else echo -en "${C_BOLD}${C_RED}Error: ${C_RESET}Unknown option: '$1'\n" 1>&2 exit fi ;; esac done cmd="read $opt" eval "$v=()" while IFS= eval "$cmd line"; do line=$(echo "$line" | sed -e "s#\([\"\`]\)#\\\\\1#g" ) eval "${v}+=(\"$line\")" done } fi