Чтобы получить решение пользователя [Y/N]
, я использую функцию "yesno", которая содержит цикл:
answer=$( while ! head -c 1 | grep -i '[ny]' ; do true ; done )
Однако этот цикл блокирует консоль и его невозможно завершить нажатием Ctrl + C или Ctrl + Z .Добавление таких элементов, как [\x03]
(ASCII для Ctrl + C ) или [\x1A]
(ASCII для Ctrl + Z ) непомочь тоже.Как добавить эту функцию, сохраняя совместимость с POSIX и не полагаясь на другие инструменты?
#!/bin/sh
yesno () {
printf "$1 [Y/N] "
old_stty_cfg=$( stty -g )
stty raw -echo
answer=$( while ! head -c 1 | grep -i '[ny]' ; do true ; done )
stty "$old_stty_cfg"
if printf "$answer" | grep -iq "^y" ; then
return 0
else
return 1
fi
}
if yesno "Question?" ; then
printf "yes\n"
return 0
else
printf "no\n"
return 1
fi