Comment puis-je afficher un compte à rebours en temps réel sur le terminal Linux? Existe-t-il une application existante ou, mieux encore, une seule ligne pour le faire?
la source
Comment puis-je afficher un compte à rebours en temps réel sur le terminal Linux? Existe-t-il une application existante ou, mieux encore, une seule ligne pour le faire?
Je ne sais pas pourquoi vous avez besoin beep
, si tout ce que vous voulez, c'est un chronomètre, vous pouvez le faire:
while true; do echo -ne "`date`\r"; done
Cela vous montrera les secondes qui passent en temps réel et vous pourrez l'arrêter avec Ctrl+ C. Si vous avez besoin d'une plus grande précision, vous pouvez l'utiliser pour vous donner des nanosecondes:
while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done
Enfin, si vous voulez vraiment, "format chronomètre", où tout commence à 0 et commence à grandir, vous pouvez faire quelque chose comme ceci:
date1=`date +%s`; while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done
Pour un compte à rebours (ce qui n'est pas ce que votre question initiale vous demandait), vous pouvez le faire (changer les secondes en conséquence):
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
Vous pouvez les combiner en commandes simples en utilisant les fonctions bash (ou le shell de votre choix). Dans bash, ajoutez ces lignes à votre ~/.bashrc
( sleep 0.1
cela fera attendre le système pendant 1 / 10ème de seconde entre chaque exécution pour ne pas spammer votre CPU):
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
}
Vous pouvez ensuite démarrer un compte à rebours d’une minute en exécutant:
countdown 60
Vous pouvez compter deux heures avec:
countdown $((2*60*60))
ou une journée entière en utilisant:
countdown $((24*60*60))
Et démarrez le chronomètre en lançant:
stopwatch
Si vous devez être capable de gérer des jours ainsi que des heures, des minutes et des secondes, vous pouvez faire quelque chose comme ceci:
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
}
Notez que la stopwatch
fonction n'a pas été testée depuis des jours car je ne voulais pas vraiment attendre 24 heures pour cela. Cela devrait fonctionner, mais s'il vous plaît, laissez-moi savoir si cela ne fonctionne pas.
.zshrc
droite après avoir lu votre réponse. Aujourd’hui, j’ai utilisécountdown
la première fois et j’ai remarqué une utilisation assez élevée du processeur. J'ai ajouté unsleep 0.1
(je ne sais pas si un temps de repos d'une fraction de seconde est pris en charge sur tous les systèmes), ce qui l'a beaucoup amélioré. L’inconvénient est bien sûr une précision d’affichage moins précise, mais je peux vivre avec un écart de max. 100ms.bash
je fais cela dans , je peux vivre avec cela (même s'il est plus élevé que prévu et j'ai également ajouté le sommeil à mon propre fichier .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
.Ma manière préférée est:
Début:
Arrêtez:
Comme @wjandrea a commenté ci-dessous, une autre version est à exécuter:
et appuyez sur
Enter
pour arrêterla source
time read
time read
échoue dans zsh, maistime (read)
fonctionne.Je cherchais la même chose et j'ai fini par écrire quelque chose de plus élaboré en Python:
Cela vous donnera un compte à rebours simple de 10 secondes:
Source: https://github.com/trehn/termdown
la source
J'ai utilisé celui-ci:
Exemple:
Voici une source .
la source
régler une minuterie pour 15 minutes
edit: J'avais un tas de liens ouverts, et je pensais que c'était spécifique à osx, désolé pour ça. Laissant ma réponse en suspens pour que les autres personnes soient au courant des congés des BSD.
la source
Ceci est pour un chronomètre avec centièmes de seconde:
Exemple
la source
return $1
J'ai combiné la réponse du très bon terdon à une fonction qui affiche en même temps le temps écoulé depuis le début et le temps jusqu'à la fin. Il existe également trois variantes, ce qui facilite l'appel (il n'est pas nécessaire de faire des calculs élémentaires), et il est également résumé. Exemple d'utilisation :
Et quelque chose comme minuterie de travail:
Et si vous avez besoin de temps très spécifique:
Voici le code à mettre dans votre .bashrc
Combinez cela avec un moyen de jouer du son sur un terminal linux ( lire un fichier mp3 ou wav via une ligne de commande Linux ) ou cygwin (
cat /path/foo.wav > /dev/dsp
fonctionne pour moi dans babun / win7) et vous obtenez un simple timer flexible avec alarme !la source
Une autre approche
Pour Mac:
Si on veut un signal quand il atteint zéro, on peut par exemple le construire avec une commande renvoyant un état de sortie non nul à zéro et le combiner avec
watch -b
, ou quelque chose du genre, mais si on veut construire un script plus élaboré, c'est probablement pas le chemin à parcourir; il s’agit plus d’une solution de type "one-liner" rapide et sale.J'aime le
watch
programme en général. Je l'ai vu pour la première fois après avoir déjà écrit d'innombrableswhile sleep 5; do
boucles d'effets différents.watch
était manifestement plus agréable.la source
J'ai fini par écrire mon propre script shell: github gist
la source
Je suis surpris que personne n'ait utilisé l'
sleepenh
outil dans leurs scripts. Au lieu de cela, les solutions proposées utilisent soit unsleep 1
entre les sorties de temporisation suivantes, soit une boucle occupée produisant le plus rapidement possible. La première solution est inadéquate car, en raison du peu de temps passé à l’impression, la sortie ne se produira pas une fois par seconde, mais un peu moins que ce qui est sous-optimal. Une fois le temps écoulé, le compteur passera une seconde. Ce dernier est inadéquat car il maintient le processeur occupé sans raison valable.L'outil que j'ai dans mes
$PATH
looks ressemble à ceci:Le script peut être utilisé comme chronomètre (en comptant jusqu'à l'interruption) ou comme une minuterie qui s'exécute pendant la durée spécifiée. Puisque la
sleep
commande est utilisée, ce script permet de spécifier la durée à compter avec la même précision que votresleep
permet. Sur Debian et ses dérivés, cela inclut des temps de sommeil inférieurs à une seconde et un moyen lisible pour l’heure de spécifier l’heure. Ainsi, par exemple, vous pouvez dire:Et comme vous pouvez le constater, la commande a fonctionné exactement pendant 2 minutes et 4,6 secondes sans trop de magie dans le script lui-même.
EDIT :
L'outil sleepenh provient du paquet du même nom dans Debian et de ses dérivés, comme Ubuntu. Pour les distributions qui ne l'ont pas, cela provient de https://github.com/nsc-deb/sleepenh
L'avantage de sleepenh est qu'il est capable de prendre en compte le petit retard accumulé dans le temps par le traitement de choses autres que le sommeil pendant une boucle. Même si on ne faisait que
sleep 1
10 fois une boucle, l'exécution globale prendrait un peu plus de 10 secondes à cause du petit temps système généré par l'exécutionsleep
et l'itération de la boucle. Cette erreur s'accumule lentement et rendrait, avec le temps, notre chronomètre de plus en plus imprécis. Pour résoudre ce problème, il est nécessaire que chaque itération de boucle calcule le temps de veille précis, qui est généralement légèrement inférieur à une seconde (pour les temporisateurs d’une seconde). L'outil sleepenh le fait pour vous.la source
sleep 0.1
. Qu'est-ce que c'estsleepnh
(je ne le trouve pas dans les dépôts Arch) et en quoi diffère-t-ilsleep
? Autant que je sache, vous faites essentiellement la même chose que ma réponse ci-dessus. Qu'est-ce que je rate?sleep 5
, c'est que vous ne dormez pas pendant exactement 5 secondes. Essayez par exempletime sleep 5
et vous verrez que l'exécution de la commande prend un peu plus de 5 secondes. Au fil du temps, les erreurs s'accumulent. L'utilitaire sleepenh permet d'éviter facilement cette accumulation d'erreur.sleepnh
est meilleure quesleep
(vous ne dites d' autres réponses utilisentsleep 1
-qui ils ne le font pas , seul le PO l'utilise) et ii) où l'obtenir et comment l'installer car ce n'est pas un outil standard.sleep
etsleepenh
dans le premier paragraphe. En tout cas, je n’étais probablement pas assez clair là-dessus, j’ai donc développé davantage à la fin. Les problèmes de précision en millisecondes sont ce que vous obtenez lorsque vous appelezsleep
une fois. Ils s'accumulent avec le temps et à un moment donné, c'est perceptible. Je n'ai pas dit que d'autres utilisent seulementsleep 1
. J'ai dit qu'ils utilisentsleep 1
ou un busyloop. Ce qu'ils font encore. Montrez-moi un contre exemple. Les réponsessleep 0.1
sont les mêmes que celles faites,sleep 1
sauf qu'elles accumulent les erreurs encore plus rapidement.Réponse courte:
Explication:
Je sais qu'il y a beaucoup de réponses, mais je veux juste poster quelque chose de très proche de la question de OP, que personnellement, j'accepterais comme " compte à rebours oneliner dans le terminal ". Mes objectifs étaient:
Comment ça fonctionne:
seq
imprime les nombres de 60 à 1.echo -ne "\r$i "
renvoie le curseur au début de la chaîne et affiche la$i
valeur actuelle . Espace après qu'il soit nécessaire d'écraser la valeur précédente, si elle était plus longue de caractères que la valeur actuelle$i
(10 -> 9).la source
Pour référence ultérieure, il existe un outil de ligne de commande appelé µTimer avec des options de ligne de commande très simples pour un minuteur de compte à rebours / à rebours.
la source
Imaginez que vous êtes une personne sur OSX à la recherche d'un chronomètre en ligne de commande. Imaginez que vous ne voulez pas installer les outils gnu et que vous voulez simplement utiliser unix
date
dans ce cas, faites comme @terdon mais avec cette modification:
la source
Utilisez simplement watch + date en heure UTC. Vous pouvez également installer un paquet pour un grand affichage ...
Essayez le!
Voir aussi http://www.cyberciti.biz/faq/create-large-colorful-text-banner-on-screen/
la source
sw est un simple chronomètre qui fonctionnera pour toujours.
Installer
Usage
la source
Un exemple en python:
la source
Jetez un coup d’œil à TermTime , c’est une belle horloge et un chronomètre basés sur un terminal:
pip install termtime
la source
Ceci est similaire à la réponse acceptée, mais terdon
countdown()
m'a donné des erreurs de syntaxe. Celui-ci fonctionne bien pour moi, cependant: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!"; }
Vous pouvez le mettre dans
.bashrc
puis exécuter avec:timer t
(où t est le temps en minutes).la source
Vous avez trouvé cette question plus tôt dans la journée lorsque vous recherchez une application à terme pour afficher un compte à rebours volumineux pour un atelier. Aucune des suggestions ne correspondait exactement à ce dont j'avais besoin, aussi en ai-je rapidement créé une autre dans Go: https://github.com/bnaucler/cdown
Comme la question a déjà reçu une réponse suffisante, considérez cela comme une question de postérité.
la source
$ sleep 1500 && xterm -fg jaune -g 240x80 &
Quand ce gros terminal avec du texte jaune saute, le temps de se lever et de s'étirer!
Remarques: - 1500 secondes = 25 minutes pomodoro - 240x80 = taille du terminal avec 240 lignes de caractères et 80 lignes. Remplit un écran pour moi sensiblement.
Crédit: http://www.linuxquestions.org/questions/linux-newbie-8/countdown-timer-for-linux-949463/
la source
Une version graphique du chronomètre
la source
Si vous souhaitez un programme compilable pour quelque raison que ce soit, voici ce qui convient:
Cela peut également être utilisé dans d'autres programmes et facilement porté si un environnement bash n'est pas disponible ou si vous préférez simplement utiliser un programme compilé.
github
la source