#!/bin/sh question=$1 default_answer=$(echo $2 | tr a-z A-Z) # Capitalize the default answer and construct the prompt if [ "$default_answer" = "Y" ]; then prompt="${question} (Y/n)? " else prompt="${question} (y/N)? " fi # Save stty configuration old_stty_cfg=$(stty -g) # Use stty to make read command work for single character input stty raw -echo printf "%s" "$prompt" >&2 while true do answer=$(dd bs=1 count=1 2>/dev/null) if printf "%s" "$answer" | grep -iq "^y\|^n"; then break elif [ "$(printf "%d" "'$answer'")" -eq 3 ]; then stty "$old_stty_cfg" printf '\n' exit 2 elif [ "$(printf "%d" "'$answer'")" -eq 13 ]; then answer="" break fi done stty "$old_stty_cfg" >&2 # Restore original stty configuration # If no answer is given, use the default answer if [ -z "$answer" ]; then answer=$default_answer fi # Print the answer and return appropriate exit code printf "%s\n" "$(echo $answer | tr a-z A-Z)" >&2 if [ "$answer" = "Y" -o "$answer" = "y" ]; then exit 0 else exit 1 fi