Ajouter des horodatages aux invites du terminal?

53

Je me demandais s'il était possible d'ajouter des horodatages aux invites de terminal, et si oui, comment pourrais-je y parvenir?

Jan Gorzny
la source
Cliquez sur ce lien pour afficher l’horloge courante synchronisée
Mana

Réponses:

61

Ajoutez cette ligne au ~/.bashrcfichier:

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\ "

Donc, le résultat sera quelque chose comme:

[07:00:31] user@name:~$
devav2
la source
Parfois, j’expérimente que le temps n’est pas correct et qu’il est plus vieux, comme si il y avait une sorte de retard. Je pensais pouvoir l'utiliser pour voir combien de temps certaines commandes prennent (grunt ..). Comment cela peut-il être?
Kevin Simper
2
@ devav2: Y a-t-il un moyen de spécifier le fuseau horaire?
Hippo
Existe-t-il un moyen d'ajouter également un horodatage au terminal lorsque vous utilisez root? Je n'ai l'horodatage que lorsque je suis un utilisateur normal. Merci
Yufenyuy Veyeh Dider
4
Pour la datecommande, vous pouvez remplacer +%H:%M:%Spar +%T.
Snapfractalpop
5
Cette vissé avec mon emballage terminal, alors j'ai utilisé l'approche détaillée ici . C'est simplement '\ D {% T}' à votre PS1
rbennett485
25

Ma solution a été d'utiliser http://bashrcgenerator.com/ pour générer cette ligne PS1 à insérer en .bashrc:

export PS1="\t [\u@\h \W]\\$ \[$(tput sgr0)\]"

Qui ressemblera

13:05:54 [chad@work-laptop:~/Downloads]$ ls -al

L'utilisation de PROMPT_COMMAND perturbe l'historique pour moi. Lorsqu'une longue ligne apparaît en parcourant l'historique, elle coupe la fin de l'invite du même nombre de caractères que l'horodatage ajouté à l'avant. par exemple

13:14:38 [chad@work-laptop:~/Doexport PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\\] "

Et cette ligne ne peut pas être modifiée car elle n’affiche pas les caractères au bon endroit, car vous ne tapez pas à la place.

Je suppose que cela pourrait être fait avec PROMPT_COMMAND, peut-être en utilisant cette partie [$ (tput sgr0)], mais PS1 fonctionne.

dogtato
la source
Le lien ici est idéal pour personnaliser davantage les timbres.
cellepo
16

Au lieu d'ajouter la date à l'invite elle-même, vous pouvez ajouter la date juste avant votre invite en plaçant la ligne suivante en haut de votre .bashrc. Pour que cela fonctionne, vous devrez également installer cowsay. C'est une manière amusante d'afficher la date tout en gardant une courte invite:

cowsay "Welcome $USER! It's now $(date '+%A %B %d %Y %r')"

Dans sa forme actuelle, il fonctionnera sans modification sur le système de quiconque, car il lit la $USERet la datevariable de l'environnement actuel.

entrez la description de l'image ici


la source
8
Le but de la mettre dans l'invite est de savoir quand a été exécutée la dernière fois qu'une commande spécifique a été exécutée.
James Oltmans
6

Comme je n'ai pas assez de points de réputation pour ajouter un commentaire à la réponse afin de l'améliorer. Il semblerait que la seule façon pour moi d'ajouter des informations est de créer une deuxième réponse. Donc, je vais répéter ce qui a été dit comme réponse et construire sur cela.

Modifiez le fichier .bashrc de l'utilisateur pour lequel vous souhaitez modifier l'horodatage.

Si vous voyez "utilisateur @ hôte: ~ $", vous vous trouvez dans le répertoire de base de votre utilisateur actuel. Le fichier .bashrc est un fichier caché car il est préfixé du point ".". Pour le voir dans une liste, vous devrez utiliser une longue liste.

Vous pouvez utiliser "ls -a" et vous devriez alors voir le fichier ".bashrc".

Editez le fichier avec un éditeur de texte. Par exemple, "nano .bashrc", "vim .bashrc", "vi .bashrc", "pico .bashrc" ou tout autre éditeur que vous souhaitez utiliser.

Si vous voulez créer un script et planifier l'ajout de nombreux shells à de nombreux utilisateurs, il peut être intéressant d'utiliser la commande "echo" conjointement avec l'opérateur append ">>". Par exemple,

echo "export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\\"" >> .bashrc

Si vous utilisez cette méthode, assurez-vous de figurer dans le répertoire de travail en cours de l'utilisateur pour lequel vous souhaitez le modifier. Pour vérifier cela, vous pouvez utiliser le "pwd" ou la commande print working directory.

Si vous n'aimez pas l'espace supplémentaire entre le crochet "]" et le nom d'utilisateur, utilisez simplement cette expression très légèrement modifiée:

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\\"

Utilisez ceci si vous éditez directement le fichier.

Avlaxis
la source
1
Vous pouvez suggérer des modifications.
Muru
4
export PROMPT_COMMAND=date

imprime la date avant chaque invite.

wojox
la source
1

Ouvrez votre .bashrcvia

vim ~/.bashrc

puis ajoutez ce qui suit à .bashrc:

#PS1="[\A \u@\h \W\a]$" 

\Aest pour time ( \Wpour seulement la fin du chemin, supprimez-le si vous voulez le chemin complet du répertoire de travail en cours). Puis tapez

source ~/.bashrc

Vous verrez quelque chose comme ça:

[16:04 trwood@cobalt04 ~/MCEq_dev]$
trwood
la source
1
enlever \Wne montrera aucun chemin du tout. \wdonnera le chemin complet.
Zanna
0

Juste pour ajouter à la réponse de @ devav2:

Une commande d'écho plus facile à lire pour les débutants serait:

export PROMPT_COMMAND='echo -n "$(date +%H:%M:%S) "'

Au lieu de

export PROMPT_COMMAND="echo -n \[\$(date +%H:%M:%S)\]\ "

Etant donné que la commande echo n'est pas destinée à être évaluée au moment de l'exportation, il est plus logique d'utiliser des guillemets simples pour les guillemets littéraux plutôt que les guillemets doubles. L'utilisation de guillemets simples pour citer la commande entière vous permet ensuite d'utiliser des guillemets doubles pour citer l'argument à la commande echo, ce qui vous évite d'avoir à échapper des caractères spéciaux tels que , [et$

qwertyzw
la source
1
Les échappements sont utilisés pour le formatage (les crochets). Je ne vois pas ce que cela ajoute à la réponse acceptée.
Elder Geek
Vous pouvez les ajouter à 'echo -n "$ (date +% H:% M:% S)"' aussi: 'echo -n "[$ (date +% H:% M:% S)]"' sans besoin de leur échapper. L'avantage d'utiliser une chaîne comme argument de la commande echo est qu'il n'est plus nécessaire d'échapper à ce qui est autrement évaluable par bash, ce qui facilite la lecture.
Qwertyzw
@ ElderGeek, j'ai ajouté des précisions supplémentaires. J'espère que ça aide.
Qwertyzw
0

Je pense que la bonne façon de procéder est de localiser dans $HOME/.bashrcles codes qui les définissent PS1, de les commenter et d’ajouter les codes personnels. Ceci est mon bloc par exemple:

PS1_DATE="\D{%Y-%m-%d %H:%M:%S}"

if [ "$color_prompt" = yes ]; then
    PS1="[$PS1_DATE \[\e]0; \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[\033[00m\]\[\033[01;34m\]\w \[\033[00m\]\$] "
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='[$PS1_DATE ${debian_chroot:+($debian_chroot)}\w \$] '
    #PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Sortie:

[2019-06-18 15:54:29 ~/Desktop $] echo "It's late!"
Marco Sulla
la source
0

La syntaxe la plus simple pour afficher un horodatage dans une invite de commande serait probablement la suivante:

    PS1='\D{%F} \t $...'

\D{format}la date est formatée (voir la man bashsection PROMPTING) comme

%Fdate complète; identique à% Y-% m-% d (voir man datesection FORMAT), et

\test l'heure actuelle au format HH: MM: SS sur 24 heures (voir la man bashsection PROMPTING)

nano ~/.bashrc

apporter des modifications aux variables PS1 comme indiqué ci-dessus

source ~/.bashrc
Dmitry Somov
la source
0
export PROMPT_COMMAND="echo -n \[\$(date +%F-%T)\]\ "
export HISTTIMEFORMAT="%F-%T "

au moins a l'air pratique pour moi.

Alexey Shcherbakov
la source