Bonjour a tous,

J'ai personnaliser mon prompt bash dernierement et j'y ai inclus l'heure - PS1="["$LOGNAME"@"$HOSTNAME" | "$PWD" | "$(date +'%d/%m/%Y %H:%M')"]n[ " -. Il est beau, mais il n'a pas la notion du temps ...

En effet le prompt s'initialise une seule et unique fois au demarage de la console donc je cherche le moyen de l'actualiser en permanence toutes les minutes afin que l'heure s'affiche correctement.

Merci de votre aide,
Thomas

PS : Il est possible de remplacer certaines variables par des diminutifs, comme $LOGNAME par u ...
Est il possible d'avoir un petit lien please ?
A vouloir faire des trucs de ce genre, tu va finir par nous ré-écrire Windows :-D

Bon, j'arrête. La seule méthode que je vois c'est un programme lancé par le ".bashrc" qui modifierai la variable d'environnement toutes les secondes ou toutes les minutes suivant le taux de raffraichissement désiré (je conseille toutes les minutes).

Mais tu peux aussi ouvrir un terminal sous gnome ou kde, tu auras l'heure dans la barre de menus :-D
Je te propose d'utiliser les variables internes de bash :
PS1="[u@h w t]n$ "
Ne jamais oublier :
man bash
=> rechercher PS1

A+
remi a écrit:
Je te propose d'utiliser les variables internes de bash :
PS1="[u@h w t]n$ "
Avec cette méthode il ne sera pas actualisé en temps réel, comme le souhaite notre ami (si j'ai bien compris sa demande). Il faudra effectuer une action pour que le prochain prompt contienne la nouvelle heure.
  • [supprimé]

Merci à vous deux.

Si je trouve le temps d'ecrire un petit programme de rafraichissement je le posterai sur le forum.

A++,
Thomas
  • [supprimé]

J'ai voulu essayer de rafraichir le prompt shell avec un script shell inséré dans le fichier '~/.bashrc'.

Les lignes que j'ai ajoutées sont :

| while true
| do if test $[SECONDS%60] -eq 0
| then PS1="["$PWD" | "$(date +'%d/%m/%Y %H:%M')"]n[ ";
| fi
| done &


L'aritmethique du script est :
Toujours tester si le temps ecoulé depuis l'ouverture du shell en secondes (representé par $SECONDS) est multiple de 60. Si oui, alors actualiser le prompt avec la nouvelle formule car plus d'une minute s'est ecoulee. Et tout ceci en tache de fond.

Les questions :
* Pourquoi ca marche pas ? :cry:
* Quelles sont les solutions pour effectuer une operation en arriere plan sous bash?
S'il n'y a pas d'autre solution que le '&' en fin d'instruction, pourquoi est-il incorrect d'ajouter un ';' derriere '&') ? :-?
* Quand dois-t-on mettre des ';' dans un script ? Je crois que c qd on veut un ordre sequentiel dans le script, alors je me demnde : existe-t-il un ordre dans les instructions conditionnelles et les boucles ?

Merci,
Thomas

N.B : Excusez, mais c mon premier script en shell... c'est navrant 🙁
Je pense que c'est une question de contexte.
Ton script doit affecter le prompt de sa session et pas de celle que tu visualise.

J'ai bien peur que ce que tu veux faire demande en réalité de modifier le shell lui-même. Mais je peux me tromper.
Ce script ne peut pas marcher puisqu'iol modifie l'invite de commande du processus d'arrière plan.

De toute manière l'invite s'affiche uniquement lorsqu'une commande se termine. Je ne vois pas comment (à part effectivement modifier les sources de bash).

Mais sur le principe, la boucle proposée poserait un énorme problème au système car elle ne donne jamais la main et provoquera donc une charge CPU maximum.

Il faudrait écrire :
while true
do 
  PS1="[u@h w t]n$ "
  sleep 60
done &
Pour le ; il remplace un retour chariot. Il n'est pas nécessaire, sauf lorsque pour une raison d'esthétique, on veut mettre 2 commandes sur la même ligne
clear
ll
Eéquivaut donc à :
clear ; ll
A+
  • [supprimé]

Puis je avoir plus de renseignements sur cette notion d'arriere-plan du BASH, car je n'en ai jamais entendu parler ?

Merci :-D
Thomas
remi a écrit:
Mais sur le principe, la boucle proposée poserait un énorme problème au système car elle ne donne jamais la main et provoquera donc une charge CPU maximum.
D'où ma remarque du début. Prendre du temps machine sur un système optimisé pour faire ce genre de futilité reviendrait à essayer de refaire Windows :-D