Меня заинтересовал таймер обратного отсчета, который выводился на экране, мол через 20 секунд всё будет ок. Цифры менялись затирая предыдущие, но с нюансом, оставался ведущий ноль.
Ну и чот захотелось на Bash’е такое запилить, ну и запилил:
#!/bin/bash
msg="deadline in: "
row=2
col=2
clear
tput cup $row $col
echo -n "$msg"
tput civis
l=${#msg}
l=$(( l + col ))
for i in {10..01}
do
tput cup $row $l
echo -n "$i"
sleep 1
done
tput cnorm
Запускаем, еее! Пошел отсчет от 10 до 01 с ведущим нулем. Прекрасно!
Из непонятного, рассказываю:
1.
tput cup $row $col = ставим курсор в нужную позицию2.
tput civis - скрываем курсор3.
l=${#msg} - вычисляем длину сроки msg4.
l=$(( l + col )) - позиция вывода таймера5.
tput cup $row $l - кидаем курсор в позицию таймера6.
tput cnorm - включаем курсор обратноВариант без ведущего нуля:
#!/bin/bash
seconds=10
for ((i=seconds; i>=1; i--))
do
echo -ne "deadline in: $i \033[0K\r"
sleep 1
done
echo -e "\nFuck up!"
Но этот вариант мне не нравится, нет в нем искры, если жать Enter, то таймер перескакивает на новую строку, ну и ведущего нуля нет, фу.
Вот такая игрушка у меня получилась. Возможно где-нибудь и воткну потом эту поделку, попугать коллег на продакшене. Пусть не расслабляются, запуская бездумно Bash скрипты. Надо еще клавиатуру блокировать. Чем бы дитя не тешилось.
Ладно, кидай в комментарии свои варианты, заценим!
tags: #bash
—
💩 @bashdays