From e46bb5fd5af3adb931e0930326c60a7c2e4cbe4e Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Tue, 11 Oct 2022 11:49:37 -0400 Subject: [PATCH] guix-install.sh: Restore compatibility with "yes" invocation. Commit 6a2e303d3a had modified prompt_yes_no to only read a single character, aiming to ease the user experience. This was, in retrospect, a bad idea, as it makes user input error more likely and introduces complexity. This commit reverts to line-oriented input, while preserving the default yes value so that a user can simply hit 'Enter' at the prompt in place of typing "yes". * etc/guix-install.sh (_flush): Delete function. (prompt_yes_no): Restore line-oriented read. Remove loop. Make anything else than yes means no. Use Bash features to streamline definition. Reported-by: Lars-Dominik Braun and others. --- etc/guix-install.sh | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/etc/guix-install.sh b/etc/guix-install.sh index f71d6f0de7..3604c71ed6 100755 --- a/etc/guix-install.sh +++ b/etc/guix-install.sh @@ -92,33 +92,20 @@ _debug() fi } -_flush() -{ - while read -t0; do - read -N1 - done -} - die() { _err "${ERR}$*" exit 1 } -# Return true if user answered yes, false otherwise. It defaults to "yes" -# when a single newline character is input. +# Return true if user answered yes, false otherwise. The prompt is +# yes-biased, that is, when the user simply enter newline, it is equivalent to +# answering "yes". # $1: The prompt question. prompt_yes_no() { - while true; do - _flush - read -N1 -rsp "$1 [Y/n]" yn - case $yn in - $'\n') echo && return 0;; - [Yy]*) echo && return 0;; - [Nn]*) echo && return 1;; - *) echo && _msg "Please answer yes or no." - esac - done + local -l yn + read -rp "$1 [Y/n]" yn + [[ ! $yn || $yn = y || $yn = yes ]] || return 1 } chk_require()