Создание обратного отсчета с PV

После этого вопроса 2013 года при отображении обратного отсчета в терминале я хотел бы немного улучшить ответ, используя pv чтобы показать бар прогрессии.

Вот мой текущий сценарий.

function countdown {
   date1=$((`date +%s` + $1));
   while [ "$date1" -ge `date +%s` ]; do
     echo -ne "$(date -u --date @$(($date1 - `date +%s`)) +%H:%M:%S)\r";
     sleep 0.1
   done
}

# 7 minutes countdown
countdown $((7*60))

Как мне улучшить это с pv? Похоже, что он отслеживает записанные данные измерения прогресса. В моем случае мне просто нужно подождать, и у меня нет показателей для измерения.

Может быть, есть лучшие альтернативы с 2018 года?

Благодарю.

2 ответа

Решение

Просто сделай это так с pv, записывая один байт символа каждую секунду.

secs=$((7 * 60))
while [ $secs -gt 0 ]
do 
  echo -n "."
  sleep 1
  : $((secs--))
done | pv -s $secs > /dev/null

echo -n для

  -n     do not output the trailing newline

pv -s для

  -s, --size SIZE          set estimated data size to SIZE bytes

sleep 1; : $((secs--)) уменьшить значение $secs каждую 1 секунду

Вы не можете улучшить это с pv, pv расшифровывается как Pipe View и отслеживает ход потока данных. Зная размер и измеряя количество данных, проходящих через него, он может дать вам оценку оставшегося времени. Если вам нужен таймер обратного отсчета, pv бесполезно.

У вас уже есть что-то написанное, что можно украсить. Другие сценарии для ваших нужд существуют в Интернете: http://handybashscripts.blogspot.com/2012/01/simple-timer-with-progress-bar.html

Другие вопросы по тегам