Как я могу отобразить таймер обратного отсчета в реальном времени на терминале Linux? Существует ли существующее приложение или, что еще лучше, один вкладыш для этого?
источник
Как я могу отобразить таймер обратного отсчета в реальном времени на терминале Linux? Существует ли существующее приложение или, что еще лучше, один вкладыш для этого?
Я не уверен, зачем вам beep
, если все, что вам нужно, это секундомер, вы можете сделать это:
while true; do echo -ne "`date`\r"; done
Это покажет вам секунды, проходящие в режиме реального времени, и вы можете остановить его с помощью Ctrl+ C. Если вам нужна большая точность, вы можете использовать это, чтобы дать вам наносекунды:
while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done
Наконец, если вам действительно очень нужен «формат секундомера», когда все начинается с 0 и начинает расти, вы можете сделать что-то вроде этого:
date1=`date +%s`; while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done
Для таймера обратного отсчета (это не то, о чем просил ваш первоначальный вопрос) вы могли бы сделать это (измените секунды соответственно):
seconds=20; date1=$((`date +%s` + $seconds));
while [ "$date1" -ge `date +%s` ]; do
echo -ne "$(date -u --date @$(($date1 - `date +%s` )) +%H:%M:%S)\r";
done
Вы можете объединить их в простые команды, используя функции bash (или любой другой оболочки). В bash добавьте эти строки к себе ~/.bashrc
(это sleep 0.1
заставит систему ждать 1/10-ю секунды между каждым запуском, чтобы не спамить ваш процессор):
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
}
function stopwatch(){
date1=`date +%s`;
while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
sleep 0.1
done
}
Затем вы можете запустить таймер обратного отсчета на одну минуту, запустив:
countdown 60
Вы можете отсчитывать два часа с:
countdown $((2*60*60))
или целый день, используя:
countdown $((24*60*60))
И запустите секундомер, запустив:
stopwatch
Если вам нужно иметь дело с днями, а также с часами, минутами и секундами, вы можете сделать что-то вроде этого:
countdown(){
date1=$((`date +%s` + $1));
while [ "$date1" -ge `date +%s` ]; do
## Is this more than 24h away?
days=$(($(($(( $date1 - $(date +%s))) * 1 ))/86400))
echo -ne "$days day(s) and $(date -u --date @$(($date1 - `date +%s`)) +%H:%M:%S)\r";
sleep 0.1
done
}
stopwatch(){
date1=`date +%s`;
while true; do
days=$(( $(($(date +%s) - date1)) / 86400 ))
echo -ne "$days day(s) and $(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
sleep 0.1
done
}
Обратите внимание, что stopwatch
функция не тестировалась в течение нескольких дней, так как я не хотел ждать ее 24 часа. Это должно работать, но, пожалуйста, дайте мне знать, если это не так.
.zshrc
сразу после прочтения вашего ответа. Сегодня я использовалcountdown
первый раз и заметил довольно высокую загрузку процессора. Я добавилsleep 0.1
(я не знаю, поддерживается ли время ожидания доли секунды во всех системах), что значительно улучшило это. Недостатком является, конечно, менее точная точность отображения, но я могу жить с отклонением макс. 100мс.bash
, я могу жить с этим (хотя это больше , чем я ожидал , и я также добавил сон моей .bashrc).date +%s
- $ date1)) +% H:% M:% S) ";echo -ne "$(date -ju -f %s $(($date1 -
date +% s)) +%H:%M:%S)\r"
;play -q -n synth 2 pluck C5
.Мой любимый способ это:
Начало:
Стоп:
Как прокомментировал @wjandrea ниже, запускается еще одна версия:
и нажмите,
Enter
чтобы остановитьисточник
time read
time read
терпит неудачу в zsh, ноtime (read)
работает.Я искал то же самое и закончил тем, что написал что-то более сложное в Python:
Это даст вам простой 10-секундный отсчет:
Источник: https://github.com/trehn/termdown.
источник
Я использовал это:
Пример:
Вот источник .
источник
установить таймер на 15 минут
редактировать: у меня было открыто несколько ссылок, и я подумал, что это специфично для OSX, извините за это. Оставляя мой ответ, чтобы другие знали о выходе на BSD.
источник
Это для секундомера с сотыми долями секунды:
пример
источник
return $1
Я объединил очень хороший ответ Тердона в функцию, которая одновременно отображает время с начала и время до конца. Есть также три варианта, так что проще звонить (вам не нужно заниматься bash math), и это тоже абстракция. Пример использования :
И что-то вроде работы таймера:
И если вам нужно определенное время:
Вот код, который нужно вставить в ваш .bashrc
Объедините это с каким-либо способом воспроизведения звука в терминале Linux ( проигрывайте mp3 или wav файл через командную строку Linux ) или Cygwin (
cat /path/foo.wav > /dev/dsp
работает для меня в babun / win7), и у вас есть простой гибкий таймер с будильником !источник
Другой подход
Для Mac:
Если кто-то хочет получить сигнал, когда он достигает нуля, он может, например, построить его с помощью команды, которая вернула бы ненулевой статус выхода в ноль, и объединить его с
watch -b
чем-то, но если вы хотите создать более сложный сценарий, это, вероятно, не путь; это скорее «быстрое и грязное однострочное» решение.Мне нравится
watch
программа в целом. Впервые я увидел это после того, как написал множествоwhile sleep 5; do
циклов для различных эффектов.watch
было явно лучше.источник
В итоге я написал свой собственный скрипт: github gist
источник
Я удивлен, что никто не использовал этот
sleepenh
инструмент в своих сценариях. Вместо этого в предлагаемых решениях используется либоsleep 1
между последующими выходами таймера, либо занятая петля, которая выводит как можно быстрее. Первое неадекватно, потому что из-за небольшого времени, затрачиваемого на печать, вывод на самом деле будет происходить не раз в секунду, а немного меньше, чем тот, который является неоптимальным. По прошествии достаточного времени счетчик пропустит секунду. Последнее неадекватно, потому что оно не загружает процессор без веской причины.Инструмент, который у меня есть в моей
$PATH
выглядит следующим образом:Сценарий может использоваться как секундомер (считая до прерывания) или как таймер, который работает в течение указанного промежутка времени. Поскольку
sleep
команда используется, этот скрипт позволяет указать длительность, с которой следует считать, с той же точностью, что и вашаsleep
. В Debian и его производных это включает в себя спящие секунды, а также удобный способ определения времени. Так, например, вы можете сказать:И, как вы можете видеть, команда выполнялась ровно за 2 минуты и 4,6 секунды без особой магии в самом скрипте.
РЕДАКТИРОВАТЬ :
Инструмент sleepenh происходит из одноименного пакета в Debian и его производных, таких как Ubuntu. Для дистрибутивов, у которых его нет, он приходит по адресу https://github.com/nsc-deb/sleepenh.
Преимущество sleepenh заключается в том, что он способен учитывать небольшую задержку, которая накапливается со временем при обработке других вещей, кроме сна во время цикла. Даже если один
sleep 1
цикл будет выполнен 10 раз, общее выполнение займет чуть больше 10 секунд из-за небольших накладных расходов, возникающих при выполненииsleep
и повторении цикла. Эта ошибка медленно накапливается и со временем сделает наш секундомер все более и более неточным. Чтобы решить эту проблему, необходимо, чтобы каждая итерация цикла вычисляла точное время ожидания, которое обычно немного меньше секунды (для таймеров с интервалом в одну секунду). Инструмент Sleepenh делает это для вас.источник
sleep 0.1
. Что такоеsleepnh
(я не могу найти его в репозиториях Arch) и чем оно отличаетсяsleep
? Насколько я могу судить, вы делаете то же самое, что и мой ответ выше. Что мне не хватает?sleep 5
, чтобы просто сказать , что вы не спите ровно 5 секунд. Попробуйте, например,time sleep 5
и вы увидите, что выполнение команды занимает чуть более 5 секунд. Со временем ошибки накапливаются. Утилита sleepenh позволяет легко избежать накопления ошибок.sleepnh
это лучше, чемsleep
(вы говорите, что другие ответы используют - аsleep 1
они этого не делают). , только OP использует это) и ii) где его взять и как установить, так как это не стандартный инструмент.sleep
иsleepenh
в первом абзаце. В любом случае, я, вероятно, не был достаточно ясен в этом вопросе, поэтому я остановился на этом подробнее. Проблемы с точностью до миллисекунды - это то, что вы получаете, когда звонитеsleep
один раз. Они накапливаются со временем, и в какой-то момент это заметно. Я не сказал, что другие используют толькоsleep 1
. Я сказал, что они используютsleep 1
или busyloop. Что они до сих пор делают. Покажите мне встречный пример. Ответыsleep 0.1
такие же, как и ответы,sleep 1
за исключением того, что они накапливают ошибки еще быстрее.Краткий ответ:
Объяснение:
Я знаю, что есть много ответов, но я просто хочу опубликовать что-то очень близкое к вопросу ОП, которое лично я бы принял как « обратный отсчет в терминале ». Моими целями были:
Как это устроено:
seq
печатает номера от 60 до 1.echo -ne "\r$i "
возвращает курсор в начало строки и печатает текущее$i
значение. Пробел после него требуется перезаписать предыдущее значение, если оно было длиннее символов, чем текущее$i
(10 -> 9).источник
Для дальнейшего использования, есть инструмент командной строки под названием µTimer с очень простыми параметрами командной строки для таймера обратного отсчета / обратного отсчета.
источник
Представьте, что вы человек в OSX, ищущий секундомер командной строки. Представьте, что вы не хотите устанавливать инструменты gnu и просто хотите работать с Unix
date
в этом случае делайте так, как говорит @terdon, но с этой модификацией:
источник
Просто используйте часы + дата в UTC времени. Вы также можете установить пакет для большого дисплея ...
Попробуй!
Смотрите также http://www.cyberciti.biz/faq/create-large-colorful-text-banner-on-screen/
источник
sw - простой секундомер, который будет работать вечно.
устанавливать
использование
источник
Пример Python:
источник
Взгляните на TermTime , это хорошие терминальные часы и секундомер:
pip install termtime
источник
Это похоже на принятый ответ, но тердон
countdown()
дал мне синтаксические ошибки. Это прекрасно работает для меня, хотя:function timer() { case "$1" in -s) shift;; *) set $(($1 * 60));; esac; local S=" "; for i in $(seq "$1" -1 1); do echo -ne "$S\r $i\r"; sleep 1; done; echo -e "$S\rTime's up!"; }
Вы можете вставить его,
.bashrc
а затем выполнить с помощью:timer t
(где t - время в минутах).источник
Нашел этот вопрос ранее сегодня, когда искал термин приложение для отображения большого таймера обратного отсчета для семинара. Ни одно из предложений не было именно тем, что мне было нужно, поэтому я быстро собрал другое в Go: https://github.com/bnaucler/cdown
Поскольку на этот вопрос уже дан достаточный ответ, считайте, что это ради потомков.
источник
$ сон 1500 && xterm -fg желтый -g 240x80 &
Когда этот большой терминал с желтым текстом подпрыгнет, пора вставать и тянуться!
Примечания: - 1500 секунд = 25-минутный pomodoro - 240x80 = размер терминала с 240 символами и 80 строками. Заполняет экран для меня заметно.
Предоставлено: http://www.linuxquestions.org/questions/linux-newbie-8/countdown-timer-for-linux-949463/.
источник
GUI-версия секундомера
источник
Если по какой-либо причине вам нужна компилируемая программа, сработает следующее:
Это также может быть использовано в других программах и легко переносится, если среда bash недоступна или вы просто предпочитаете использовать скомпилированную программу
GitHub
источник