13

I would like to keep timestamps on the commands logged in my Bash $HISTFILE, is it possible?

I did not manage to set it up using man bash as an information source.

My other options are as follows:

function thebanana() {
  local -r -a bash_commands=(
    "ls"
    # ... more coconut commands
  )
  for bash_command in "${bash_commands[@]}"; do
    printf "${bash_command}"
    printf ":"
  done
}
export HISTFILE=banana
export HISTIGNORE="$(thebanana)"
export HISTSIZE=999999
export HISTFILESIZE=999999999
export HISTCONTROL=ignoredups:erasedups

I should have mentioned I am on OS X Mountain Lion (sigh). uname -a gives me:

Darwin CoconutMac.local 12.2.0 Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64

and echo $BASH_VERSION gives me:

3.2.48(1)-release

Tried adding this:

export HISTTIMEFORMAT='%b %d %I:%M:%S %p '

and it only prefixes this kind of timestamps to commands:

#1349057791

I try echoing back the variable (echo $HISTTIMEFORMAT), it has the right value.

Interesting!

I even removed .profile completely to debug this. Still only funny timestamps:

#1349058320

I don't know how to further troubleshoot this... :(

Solution: I was using a script that reads the $HISTFILE directly, not the history built-in so the epoch-based timestamp (secs since Coordinated Universal Time (UTC) of January 1, 1970) was not being translated using the date formatting string. Plain-old history works fine, I'll use that instead.

  • 2
    Have you tried setting HISTTIMEFORMAT? – jw013 Oct 1 '12 at 1:36
  • Probably I am getting the strftime format wrong. It would help if the man page included at least a couple of examples.. +%Y-%m-%d %H-%M-%S ? – Robottinosino Oct 1 '12 at 1:43
14

Yes, put this in ~/.bashrc :

export HISTTIMEFORMAT='%F %T '

Then, run the following commands :

. ~/.bashrc
history

It will look like this :

 (...)
 5200  2012-09-30 23:55:37 find -printf '%Ts %f\n'
 5201  2012-10-01 00:00:58 ls
 5202  2012-10-01 00:03:45 cd
 (...)

Explanations of the output :

  • first col is the unique id
  • second one is the date, third is the hour
  • latest is your command line
  • 2
    Nope, doesn't work on OSX.. :( Prob that's the issue. A strange OS. – Robottinosino Oct 1 '12 at 1:58
  • Did you source ~/.bashrc ? – Gilles Quenot Oct 1 '12 at 2:05
  • I most definitely did. It is doing "something": adding a commented line before the command with a numeric timestamp: #1349057149 – Robottinosino Oct 1 '12 at 2:07
  • The only ressource I've found accordingly to this is apple.stackexchange.com/questions/33970/… (search for HISTTIMEFORMAT) – Gilles Quenot Oct 1 '12 at 2:13
  • 1
    @Robottinosino Yes the commented line is the expected format. To display the commands with formatted time, use the history builtin command, don't look at the history file directly. – jw013 Oct 1 '12 at 3:44

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.