У меня есть следующие 5 секундный таймер, который печатает звездочку за каждую секунду.
timer () {
i=1
trap 'i=5' INT
while [[ $i -le 5 ]]; do
sleep 1
printf "*"
((i+=1))
done
}
Каким-то образом блок ловушек выглядит немного хакерским, и мне интересно, есть ли более правильный способ прервать весь цикл (а не только текущий цикл сна). Я пробовал:
trap 'print "foo"' INT
в различных местах внутри и снаружи функции, но, как я уже упоминал ранее, это просто прерывает текущий цикл ожидания.