diff options
author | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2022-10-11 11:49:37 -0400 |
---|---|---|
committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2022-10-11 12:00:44 -0400 |
commit | e46bb5fd5af3adb931e0930326c60a7c2e4cbe4e (patch) | |
tree | d5785e3dcf7ed1f5ed15726cd2c5ec5c59ee7671 | |
parent | 68d79a8b60a1a564a8425de8220fb65dc79ba9ee (diff) |
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 <lars@6xq.net> and others.
-rwxr-xr-x | etc/guix-install.sh | 25 |
1 files 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() |