Сценарий оболочки Linux в фоновом режиме, выход из цикла чтения буфера клавиатуры
На одном ноутбуке с x-ubuntu 18.04 у меня есть сценарий оболочки (.sh), который автоматизирует серию кликов в веб-приложении (через xdotool). Все работает нормально, но мне нужно иметь возможность останавливать скрипт одним нажатием кнопки (в то время как фокус находится на браузере из-за щелчков). На данный момент я выполняю буферизацию, щелкая сценарий в окне терминала каждые k (считываемых с терминала) итераций и давая 5-секундный сон, чтобы я мог нажать ctrl + c. Это решение, однако, помимо того, что оно не очень элегантно, заставляет меня всегда держать терминал и браузер в одном и том же положении и "терять" 5 секунд каждые k итераций. Я прилагаю сводный скрипт, я действительно все перепробовал, но я не могу с ним разобраться, некоторое время назад я сделал тот же скрипт на C++ (но я, к сожалению, был под Windows, и я не могу использовать C++ на этом ноутбуке), собираюсь прочитать буфер клавиатуры...ps: я не могу использовать различные автокликеры, потому что скрипт, помимо нажатия, также выполняет другие функции (запускает программы, обновляет базы данных и т. д.)
#!/bin/sh
p_p()
{ # brings the terminal window to the front
xdotool mousemove 300 0
sleep 0.5 # top-panel up
xdotool click 1
}
i=1
echo "every how many iterations do you want the possibility to interrupt?"
read k
until [ $i -gt 100000000000 ]
do
for X in $(seq 3)
do
xdotool mousemove 974 431
xdotool click 1
sleep 0.1
done
#here there is a function for other stuff
remainder=$(( i % k ))
if [ "$remainder" -eq 0 ]; then
p_p
echo "press ctrl + c for interrupt"
sleep 5
else
sleep 0.5
fi
i=$(( i+1 ))
echo "$i"
done
echo "security limit reached"