Cette question me préoccupe depuis quelques jours, et voici mon post édité avec tous les éléments que j'ai appris. Plus précisément, mon objectif était d'afficher l'horloge à côté de l'invite dans BASH. Comme Radu Radeanu l'a mentionné dans sa réponse, la clé est de trouver une fonction ou une variable capable de rafraîchir constamment l'invite de commande ou de redessiner l'écran, sans interférer avec votre écran ou avec ce que vous tapez. Bien que cela soit possible avec une boucle while, comme l'a montré G_P, le redessin constant de l'écran avec la fonction tput perturbe le texte qui se trouve sur mon écran au moment où il est rafraîchi. Je me suis rapproché de la demande de l'OP en modifiant quelque peu le code que G_P a posté, mais je pense que la réponse de Radu est la plus proche de ce que l'OP veut. Sans plus attendre, voici quelques-unes des choses que j'ai apprises, présentées à votre jugement.
#1, Ma solution préférée : Multiplexeur terminal
Le multiplexeur de terminal est un logiciel qui permet de diviser l'écran du terminal en deux ou plusieurs écrans. En particulier, je voudrais attirer l'attention sur le terminal Byobu. Cet émulateur de terminal basé sur ncurses, vous permet d'afficher le temps, le pourcentage de CPU, la mémoire, et tout un tas d'autres indicateurs. Dans la capture d'écran de mon terminal Byobu, vous pouvez voir la température du CPU, le pourcentage de la batterie, la qualité de la connexion internet, la fréquence du CPU, la RAM, la date, et bien sûr l'heure. Si vous souhaitez surveiller en permanence ces éléments dans le terminal, Byobu est la solution idéale. En fait, je l'apprécie tellement que je l'ai configuré pour qu'il se charge automatiquement lors de la connexion à tty. La seule bizarrerie est que dans tty vous ne pouvez pas fusionner les fenêtres séparées - seulement passer d'un onglet à l'autre avec les touches F3 et F4.
Une autre solution impliquant le multiplexage des fenêtres est l'utilisation de splitvt
qui divise l'écran en deux parties. Vous pouvez lancer une horloge de terminal telle que tty-clock
Pour cela, utilisez la commande watch avec la date, ou codez-en une vous-même avec un script. Nous y reviendrons plus tard. Dans la capture d'écran, vous pouvez voir une partie du split avec l'invite bash normale en haut, et dans la partie inférieure, vous pouvez voir un script en cours d'exécution, qui rafraîchit constamment la sortie de date
avec la commande clear
commande.
#2 , boucle While Do et tput C'est probablement ce qui se rapproche le plus de ce que la personne qui a posé la question souhaitait voir implémenté avec bash.
G_P a mis en ligne une excellente solution impliquant l'utilisation de la fonction while do
y tput
commandes. Cependant, dans le code de G_P, il y a deux choses que je n'aime pas. Premièrement, l'horloge était à droite de l'invite, et deuxièmement - parce que le cycle de sommeil est d'une seconde (voir le code original où il est question de sommeil), l'écran est redessiné toutes les secondes, et cela perturbe ma sortie. Ce que j'ai fait, c'est d'éditer mon prompt bash pour qu'il soit une ligne plus bas avec \n et modifier le code de G_P pour que l'opérateur tput positionne l'horloge juste au-dessus de l'invite, et la rafraîchisse toutes les 60 secondes ; cela me permet de voir les heures et les minutes (et je ne me soucie pas vraiment des minutes), tandis que la boucle de l'horloge n'encombre pas mon écran. Tout 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 &
Petite modification : J'ai remarqué que le code ci-dessus n'affiche pas toujours l'horloge immédiatement. Voici une meilleure version : while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done &
Celui-ci place d'abord l'horloge sur l'écran, puis indique à la base qu'elle doit passer par un cycle de sommeil de 60 secondes.
Notez que le tput cup 0 0 place l'horloge dans le coin supérieur droit de l'écran, juste au-dessus de mon invite et sleep 60 change le cycle de sommeil à 60 secondes, parce que de cette façon je peux surveiller seulement les heures et les minutes au lieu de chaque seconde. De cette façon, le texte que j'ai à l'écran n'est pas affecté, la plupart du temps (seulement quand je lance une commande au moment où l'horloge se rafraîchit).
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 un # commentaire indiquant que c'est un élément que vous avez ajouté initialement. Et n'oubliez pas de toujours sauvegarder un fichier de ce type au cas où vous feriez un bubu et que vous auriez besoin de revenir en arrière.
#3, Scripting et autres
Cette partie est réservée à ceux qui veulent voir le temps passer. Pour ceux qui veulent le surveiller en permanence, les options #1 et #2 sont préférables.
Comme nous l'avons déjà vu, la boucle while do est très utile. Voici comment vous pouvez créer une horloge avec la boucle while do, la date et les commandes sleep.
Appuyez sur retour/entrée, et vous verrez la sortie de la commande date s'afficher sur l'écran toutes les secondes. Si vous ne voulez pas taper tout cela à 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 consiste à watch -n1 date
qui exécutera continuellement la commande de 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 manière ou d'une autre, et j'espère que j'ai pu contribuer à cette question. Le terminal Byobu est la meilleure solution, mais décidez vous-même, faites des recherches et choisissez la solution qui vous convient le mieux.
Quelques-unes des choses que j'ai trouvées au cours de mes recherches :
Mon post original, la solution minimaliste : Modifiez votre fichier ~/.bashrc. Je préfère l'éditer avec nano, donc
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 l'instruction else, la première ligne est commentée avec # (c'est mon ancien prompt), maintenant la deuxième ligne est celle que vous voulez, et spécifiquement \t
de l'opérateur. Il indique le temps de fonctionnement au format 24 heures. Pour plus d'informations, consultez este . Autre petite remarque, j'utilise le produit après autre chose, parce que je n'utilise pas de prompteur coloré.
PS : N'hésitez pas à me faire savoir si je dois ajouter quelque chose à ma réponse ou la modifier de quelque manière que ce soit, mais pour l'essentiel, je pense qu'il s'agit de la réponse la plus concluante que j'aie pu trouver, et en tout cas, personnellement, je n'y ajouterai rien de nouveau.