48 votes

Comment afficher une horloge en cours d'exécution dans le terminal avant l'invite de commande ?

Je préfère utiliser le terminal et j'y passe le plus clair de mon temps. Je cherche un moyen de voir le temps passé dans le terminal pendant que je l'utilise en parallèle. L'heure changerait automatiquement quand elle passe. Ce serait génial si cela pouvait s'afficher à gauche de mon invite de commande.

Si c'est mon invite de commande dans le terminal :

saurav@saurav-P4I45Gx-PE:~$

Dans ce cas, j'aimerais voir clock(time) comme :

saurav@saurav-P4I45Gx-PE[06:27:01]:~$

o

saurav@(06:27:01):~$

ou tout autre format. où 06:27:01 est le temps. Ce que je veux, c'est simplement afficher l'heure qui change au fur et à mesure que les secondes s'écoulent.

Existe-t-il un moyen d'y parvenir ?

1voto

kiri Points 25860

Cette durée ne changera que lorsqu'une nouvelle invite sera exécutée.

Vous pouvez ajouter les éléments suivants à votre .bashrc :

export PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:[\t]:\w\$ "

Qui produira :

USER@HOST:[12:59:59]:~$ _

Plus d'informations ici : http://www.thegeekstuff.com/2008/09/bash-Shell-ps1-10-examples-to-make-your-linux-prompt-like-angelina-jolie/#8

Recherchez "8. Créez votre propre invite en utilisant les codes disponibles pour la variable PS1" dans la page ci-dessus.

1voto

v2r Points 8969

J'aime beaucoup la ncmpcpp fonction d'horloge, déclenchée par 0 -(voir capture d'écran). Pour plus de détails sur la procédure d'installation, veuillez vous référer au document suivant poste .

enter image description here

1voto

Beglex Points 21

Influencé par g_p y Serg J'ai essayé de créer une fonction dans bash. Cela fonctionne, mais je ne suis pas sûr que ce soit une bonne idée de vérifier la commande ps toutes les secondes pour voir si bash est un processus fg ou non

prompttime() {
  PSCOLGREEN="\[$(tput setaf 2)\]"
  PSCOLRESET="\[$(tput sgr0)\]"
  PS1="${PSCOLGREEN}\\$ ${PSCOLRESET}[--:--:-- \W] "
  [ "$PROMPTCURRTTY" ] || {
    PROMPTCURRTTYtemp=$(tty)
    PROMPTCURRTTY=${PROMPTCURRTTYtemp//\/dev\//}
    unset PROMPTCURRTTYtemp; }
  PROMPTSTATE="[S]s+"
  while :; do
    sleep 1
    [ "$(ps a | grep "${PROMPTCURRTTY}.*${PROMPTSTATE}.*$(basename $SHELL)")" ] &&
    { tput sc
      tput hpa 3
      echo -en "$(date +%T)"
      tput rc; }
    continue
  done&
}

1voto

WinEunuuchs2Unix Points 91128

Si vous n'avez jamais besoin d'utiliser debian_chroot il est alors pratique d'indiquer l'heure à laquelle l'invite de commande a été affichée en utilisant :

export PROMPT_COMMAND='debian_chroot=$(date +%r)'

Tapez ceci dans votre terminal et regardez votre invite de commande changer avec le temps :

rick@alien:~$ export PROMPT_COMMAND='debian_chroot=$(date +%r)'

(09:14:59 PM)rick@alien:~$ 

Après avoir réglé l'heure une fois, vous obtenez une horloge en marche qui se met à jour toutes les secondes :

while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &

Le présent .gif montre les commandes en action :

Time terminal prompt.gif

0voto

domson Points 101

Écrire un buildin chargeable pour bash un moyen très puissant de compiler les goulots d'étranglement en bash, quoi qu'il en soit ...

Voici un bon point de départ pour aborder le sujet

J'ai appelé l'intégration chargeable reprompt et sa source ressemble à quelque chose d'aussi simple que ce qui suit :

...
#include "readline/rlprivate.h"

...

int
reprompt_builtin (list)
     WORD_LIST *list;
{
  rl_set_prompt (list->word->word);
  return (EXECUTION_SUCCESS);
}

...

struct builtin reprompt_struct = {
  "reprompt",    /* builtin name */
  reprompt_builtin,  /* function implementing the builtin */
  BUILTIN_ENABLED,  /* initial flags for builtin */
  "reprompt [prompt]",     /* usage synopsis */
  0      /* reserved for internal use */
};

Compilez et installez votre builtin chargeable. Utilisez-le comme suit :

enable -f /usr/lib/bash/reprompt reprompt

function Login::ps () {
  declare -gx PS1="$(your_custom_ps_generator_function)"
}

export PROMPT_COMMAND="Login::ps"

trap 'Login::ps; reprompt "$PS1";' SIGWINCH

Mes expériences ont abouti : terminal resize prompt update preview

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X