Ладно, хорош про винду, ловите еще чтива. Выше в посте когда ставил docker, вылез алерт «WSL DETECTED: We recommend using Docker Desktop for Windows.»

Меня заинтересовал таймер обратного отсчета, который выводился на экране, мол через 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} - вычисляем длину строки msg
  4. 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, то таймер перескакивает на новую строку, ну и ведущего нуля нет, фу.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Вот такая игрушка у меня получилась. Возможно где-нибудь и воткну потом эту поделку, попугать коллег на продакшене. Пусть не расслабляются, запуская бездумно Bash скрипты. Надо еще клавиатуру блокировать. Чем бы дитя не тешилось.

Ладно, кидай в комментарии свои варианты, заценим!