Cette question me dérange depuis quelques jours, et voici mon post édité avec tout le matériel que j'ai appris. Plus précisément, mon objectif était d’afficher l’horloge suivante à invite dans BASH. Comme Radu Radeanu l’a mentionné dans sa réponse, l’essentiel est de trouver une fonction ou une variable capable d’actualiser constamment l’invite de commande ou de redessiner l’écran, sans interférer avec votre écran ni avec le texte que vous tapez. Bien que cela soit possible avec la boucle while, comme le montre G_P, le redessin constant de l’écran avec la fonction tput gâche le texte affiché à l’écran au moment de son rafraîchissement. Je suis presque sur le point d'atteindre ce que le PO a demandé en modifiant quelque peu le code affiché par G_P, mais je crois toujours que la réponse de Radu est la plus proche de ce que veut PO. Sans plus tarder, voici certaines des choses que je '
# 1, ma solution préférée: multiplexeur de terminal
Le multiplexeur de terminal est un logiciel qui permet de diviser l'écran du terminal en deux écrans ou plus. En particulier, je veux attirer l'attention sur le terminal Byobu. Cet émulateur de terminal basé sur ncurses vous permet d’afficher l’heure, le pourcentage de l’UC, la mémoire et de nombreux autres indicateurs. Dans la capture d'écran de mon terminal byobu, vous pouvez voir la température du processeur, le pourcentage de batterie, la qualité de la connexion Internet, la fréquence du processeur, la mémoire vive, la date et bien sûr l'heure. Si vous êtes principalement préoccupé par la surveillance constante de ces choses pendant le terminal, Byobu est la voie à suivre. En fait, je l’ai tellement aimé que je l’ai configuré pour se charger automatiquement lors de la connexion à tty. Le seul problème est que dans tty, il est impossible de fusionner les fenêtres séparées - il suffit de basculer entre les onglets avec les touches F3 et F4.
Une autre solution impliquant le multiplexage des fenêtres consiste à utiliser splitvt
, qui divise l'écran en deux parties. Vous pouvez exécuter une horloge de terminal telle que tty-clock
, utiliser la commande de surveillance avec la date ou en coder une vous-même avec un script. Plus sur cela plus tard. Dans la capture d'écran, vous pouvez voir une partie de la scission avec l'invite bash normale en haut et dans la partie inférieure, un script en cours d'exécution qui actualise constamment la sortie de date
commande avec clear
commande.
# 2, While Do Loop and tput
C'est probablement ce qui est proche de ce que la personne qui a posé la question voulait implémenter avec bash.
G_P a posté une excellente solution impliquant les commandes while do
et tput
. Cependant, dans le code de G_P, il y avait deux choses que je n'aimais pas. Premièrement, l'horloge était à droite de l'invite, et deux - parce que le cycle de sommeil est d'une seconde (reportez-vous au code d'origine qui dit sommeil), l'écran est redessiné à chaque seconde, ce qui perturbe ma sortie. Ce que j’ai fait, c’est de modifier mon invite bash pour qu’elle soit inférieure d’une ligne avec l’opérateur \ n et de modifier le code de G_P afin que l’opérateur tput positionne l’horloge juste au-dessus de l’invite et s’actualise toutes les 60 secondes; cela me permet de voir les heures et les minutes (et je ne m'inquiète pas vraiment des minutes), alors que la boucle de l'horloge ne gâche pas mon écran. D'abord, voici mon invite:
PS1='${debian_chroot:+($debian_chroot)}\n[*\u@Ubuntu*]\n $(date) :\w\$ '
Et voici le code modifié de G_P: enter code here
while sleep 60;do tput sc;tput cup 0 0;date +%R;tput rc;done &
Petit montage : j'ai remarqué que ce code ci-dessus ne fait pas apparaître l'horloge tout de suite parfois. Voici une meilleure version: while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done &
celle-ci place l’horloge à l’écran d’abord, puis indique à Bash de passer par un cycle de sommeil de 60 secondes
Remarquez que la tasse d'entrée 0 0 place l'horloge dans le coin supérieur droit de l'écran, juste au-dessus de mon invite et de mon sommeil 60 changements de cycle de veille en 60 secondes, car je ne peux donc surveiller que les heures et les minutes au lieu de toutes les secondes. De cette façon, le texte que j'ai à l'écran n'est pas affecté, pour la plupart (uniquement lorsque je lance une commande, la même horloge s'actualise).
La ligne PS1 est déjà dans votre profil .bashrc, il vous suffit donc de la modifier un peu. La boucle while do devrait être ajoutée quelque part dans le même fichier, de préférence à la fin avec # commente que c’est ce que vous avez ajouté initialement. Et n'oubliez pas de toujours sauvegarder tous les fichiers de ce type au cas où vous feriez un bubu et que vous deviez revenir à la situation antérieure.
# 3, Scripting and other
Cette partie est simplement pour ceux qui veulent voir le temps. Pour ceux qui veulent le surveiller en permanence, les options 1 et 2 sont les options préférées.
Comme nous l’avons déjà vu, la boucle while est très utile. Voici comment créer une horloge avec les commandes while do, loop et date.
Appuyez sur Entrée / Entrée, et vous verrez essentiellement le résultat de la commande de date affiché sur l'écran effacé toutes les secondes. Si vous ne voulez pas tout écrire à chaque fois, transformez tout cela en script:
#!/bin/bash
while true
do
clear;date
sleep 1
done
Vous pouvez maintenant exécuter ce script avec splitvt dans une instance de bash, tout en travaillant dans l'autre.
Une autre solution est la watch -n1 date
commande, qui exécute en permanence la commande date avec une période de 1 seconde.
En conclusion: j'ai appris certaines choses en essayant de trouver la réponse à cette question, et j'espère que mes découvertes vous ont aidé d'une certaine manière, et j'espère que j'ai pu contribuer à cette question. Le terminal IMHO de Byobu est la meilleure solution, mais décidez-vous, faites des recherches et choisissez la méthode qui vous convient le mieux.
Certaines des choses que j'ai trouvées lors de mes recherches:
Mon article original, la solution minimaliste: Éditez votre fichier ~ / .bashrc. Je préfère l’éditer avec nano, alors
nano ~/.bashrc
Voici la partie de mon propre fichier édité:
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\$'
else
# PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]\t:\w\$ '
fi
Après une autre déclaration, la première ligne est commentée avec # (il s’agit de mon ancienne invite), la deuxième ligne est celle que vous souhaitez, et plus précisément \t
opérateur. Cela montre la durée en format 24 heures. Pour plus d'informations consultez ceci . Également une petite note, j'utilise le matériel après l'autre, car je n'utilise pas de message en couleur.
PS: S'il vous plaît, faites-moi savoir si je devrais ajouter quelque chose à ma réponse ou la modifier de quelque manière que ce soit, mais pour la plupart, je pense que c'est la réponse la plus concluante que je pourrais trouver, et au moins, personnellement, je ne rajouterai rien. nouveau pour elle.
$PS1
variable (invite) pour avoir le temps, mais je ne suis pas sûr que des modifications soient apportées.