Иногда скрипту нужно подождать: пауза перед перезапуском сервиса, таймер перед завершением работы, задержка в цикле. Просто sleep - бывает скучно. Сделаем задержку с индикатором прогресса прямо в терминале.
▪️ Вариант 1: простой таймер с индикатором прогресса
wait_with_progress() {
local seconds=$1
echo -n "Ожидание $seconds сек: ["
for ((i = 0; i < seconds; i++)); do
echo -n "#"
sleep 1
done
echo "] Готово!"
}
wait_with_progress 5
Вывод:
Ожидание 5 сек: [#####] Готово!
▪️ Вариант 2: "бегающий" индикатор во время ожидания
spinner_wait() {
local pid=$!
local delay=0.1
local spinstr='|/-\'
echo -n "Ждем... "
while kill -0 $pid 2>/dev/null; do
local temp=${spinstr#?}
printf " [%c] " "$spinstr"
spinstr=$temp${spinstr%"$temp"}
sleep $delay
printf "\b\b\b\b\b\b"
done
echo "Готово!"
}
# Пример: запуск команды с ожиданием
(sleep 5) & spinner_wait
Этот индикатор крутится, пока выполняется команда.
▪️ Вариант 3: таймер обратного отсчета
countdown() {
local sec=$1
while [ $sec -gt 0 ]; do
printf "\rОсталось: %2d сек..." "$sec"
sleep 1
((sec--))
done
echo -e "\rВремя вышло! "
}
countdown 10
Это удобно для сценариев с обратным отсчетом до перезапуска или отката.
⭐️ Также можно использовать
tput civis и tput cnorm для скрытия/показа курсора:
tput civis # скрыть
# ...индикатор...
tput cnorm # вернуть
BashTex 📱 #bash