#!/bin/sh # Define ask_yn, which asks a yes or no question and defaults to the specified choice. # Outputs 1 for yes and 0 for no ask_yn() { default=${2:-"y"} default=$(echo "$default" | tr '[:upper:]' '[:lower:]') if [ "$default" = "y" ]; then prompt="${1} (Y/n): " default_output=1 else prompt="${1} (y/N): " default_output=0 fi while true; do # Show prompt and get user input printf "%s" "$prompt" if [ "$(uname)" = "Darwin" ]; then # On macOS, use "read -n 1" read -n 1 -r REPLY else # On Linux and others, use "read -n 1 -s" read -r -n 1 -s REPLY fi # If user hits Ctrl+C or Enter, break and return default output if [ -z "$REPLY" ] || [ "$REPLY" = "$(printf '\003')" ]; then REPLY=$default printf "\n" break fi case "$REPLY" in y|Y ) printf "\n"; return 1;; n|N ) printf "\n"; return 0;; * ) printf "\nInvalid input. Please type 'y' or 'n'.";; esac done return $default_output } # Call the function if this script is being run directly if [ "${BASH_SOURCE[0]}" = "$0" ]; then ask_yn "$@" fi