Доброго времени суток, знатоки. Нужен совет. Есть основной скрипт, в ходе которого идет взаимодействие с пользователем в формате «нажмите y/n» (т.е. stdin уже используется). Нужно, чтобы по нажатию на задаваемую кнопку клавиатуры основной скрипт прерывал работу.
Как я попытался это реализовать: двумя способами, с помощью read и с помощью grep (а, и еще попробовал с помощью stty - начиная с stty -echo -icanon time 0 min 0, но тоже не получилось).
Проблема с grep (grep -q <кнопка>) получается в том, что основной поток уходит в цикл с grep`ом, и естественно, на нем зацикливается, когда мне нужно, чтобы основной скрипт двигался своим путем, а STDIN все время работы скрипта слушался на предмет нажатия заданной клавиши. С read в итоге все это вылилось вот в такую небольшую штуку:
breakByButton()
{
while ! [ "$z" = "11" ]
do
read -t 1 -n 1 key
if [[ $key = <желаемая кнопка> ]]
then
echo -e "\n\e[31mStopped by user\e[0m"
break
fi
done
}
Разумеется, данная функция работает тоже только там, где ее вызвали, а в фоне, как и с grep, выполнение прерывается после первого нажатия на Enter. Сейчас думаю над распараллеливанием процессов - скрипта и read`а, но решения у меня пока так и нет. Буду благодарен за корректировку моих вариантов либо предложение более элегантных и правильных решений - словом, любую помощь.