44

I was wondering if it was possible to add timestamps to terminal prompts, and if so, how could I achieve this?

  • check this link to display running clock in sync – Mana Oct 25 '16 at 7:02
52

Add this line to the ~/.bashrc file:

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

So the output will be something like:

[07:00:31] user@name:~$
  • Sometimes I experince that the time is not correct and is older, like there is some kind of delay. I though I could use it to see how long certain commands take (grunt..). How can that be? – Kevin Simper Mar 19 '14 at 15:12
  • 2
    @devav2: Is there a way to specify the timezone? – Hippo Jul 25 '15 at 23:05
  • Is there a way you could also add time stamp to the terminal when you are using root? I only have the time stamp when i am a normal user. Thanks – Yufenyuy Veyeh Dider May 14 '16 at 8:58
  • 3
    For the date command, you can replace +%H:%M:%S with +%T. – snapfractalpop Jun 20 '16 at 17:44
  • 4
    This screwed with my terminal wrapping, so I used the approach detailed here instead. It is just add '\D{%T}' to your PS1 – rbennett485 Jul 11 '16 at 10:40
22

My solution was to use http://bashrcgenerator.com/ to generate this PS1 line to put in .bashrc:

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

Which will look like

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

Using PROMPT_COMMAND messes up the history for me. When a longer line comes up while cycling through the history, it cuts off the end of the prompt by the same number of characters as the timestamp that was added to the front. e.g.

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

And this line can't be edited because it does not display the characters in the right place, as in you aren't typing where it looks like you're typing.

I'm guessing it could be done with PROMPT_COMMAND, maybe by using that [$(tput sgr0)] part, but PS1 works.

  • The link here is great for further customizing stamps. – cellepo Jul 11 '16 at 16:45
13

Instead of adding the date to the prompt itself, you could add the date just before your prompt by placing the following line at the top of your .bashrc. For it work you will also need to install cowsay. It's a fun way of displaying the date while keeping a short prompt:

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

In its current form it will work on anyone's system without amendment as it reads the $USER and the date variable from the current environment.

enter image description here

  • 7
    The point of putting it in the prompt is to know when the last time you executed a specific command was. – James Oltmans Apr 3 '17 at 21:15
5

Since I don't have enough reputation points to add a comment to the answer to improve it. It would seem that the only way I can add information is to create a second answer. So, I will repeat what was said as the answer and build on that.

Edit the .bashrc file for the user that you want to have the date stamp modified for.

If you see "user@host:~$" you're in your current user's home directory. The .bashrc file is a hidden file since it is prefixed with the dot ".". To see it in a list you will need to use a long listing.

You can use "ls -a" and you should then see the ".bashrc" file.

Edit the file with a text editor. For exmaple, "nano .bashrc", "vim .bashrc", "vi .bashrc", "pico .bashrc" or whatever editor you wish to use.

If you want to script this and plan on adding it to many shells for many users it may be beneficial to use the "echo" command in conjunction with the append ">>" operator. For example,

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

If you use that method be sure that you are in the current working directory of the user that you wish to modify it for. To check this you can use the "pwd" or print working directory command.

If you don't like the extra space between the "]" end bracket and the username just use this very slightly modified regex:

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

Use this if you're directly editing the file.

  • 1
    You can suggest edits. – muru Jan 8 '15 at 20:24
2
export PROMPT_COMMAND=date

prints the date before issuing each prompt.

1

Open your .bashrc via

vim ~/.bashrc

and then add in the following to .bashrc:

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

where \A is for time (\W for only end of path, remove if you want the entire current working directory path). Then type

source ~/.bashrc

You will see something like this:

[16:04 trwood@cobalt04 ~/MCEq_dev]$
  • 1
    removing \W will show no path at all. \w will give the full path. – Zanna Aug 24 '16 at 21:39
0

Just to add to @devav2 's answer:

An easier-to-read echo command for newbies would be:

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

Instead of

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

Becasue the echo command is not meant to be evaluated at the time of the export, it makes more sense to use single quotes for literal quoting rather than double quotes. Using single quotes to quote the entire command then allows you to use double quotes to quote the arguement to the echo command, eliminating the need to escape special characters like , [ and $

  • 1
    The escapes are being used for formatting (the brackets). I don't see what this adds to the accepted answer. – Elder Geek Aug 22 '17 at 16:32
  • You can add them to 'echo -n "$(date +%H:%M:%S) "' too: 'echo -n "[$(date +%H:%M:%S)] "' without needing to escape them. The advantage to using a string as the arguement to the echo command is that now you don't need to escape what is otherwise bash evaluatable, making it easier to read. – qwertyzw Aug 22 '17 at 16:49
  • @ElderGeek I added further clarification. I hope that helps. – qwertyzw Aug 22 '17 at 16:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.