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.
master
parent
68d79a8b60
commit
e46bb5fd5a
|
@ -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()
|
||||
|
|
Reference in New Issue