LINUX.ORG.RU

Сообщения nonrandompasser

 

Остановка выполнения скрипта по кнопке (слушать STDIN в течение всего скрипта)

Форум — Development

Доброго времени суток, знатоки. Нужен совет. Есть основной скрипт, в ходе которого идет взаимодействие с пользователем в формате «нажмите 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`а, но решения у меня пока так и нет. Буду благодарен за корректировку моих вариантов либо предложение более элегантных и правильных решений - словом, любую помощь.

 

nonrandompasser
()

RSS подписка на новые темы