69

When I run the history command on my ubuntu server, I get output as follows:

   history
   ...
   25  cd ~
   26  ls -a
   27  vim /etc/gitconfig
   28  vim ~/.gitconfig

I want to view the datetime of a particular user. However when I assume them:

su otheruser
export HISTTIMEFORMAT='%F %T  '
history
...
25  cd ~
26  ls -a
27  vim /etc/gitconfig
28  vim ~/.gitconfig

It still doesn't show datetime. I am using zsh shell.

3
  • 1
    I created a dedicated program for storing and viewing your history, maybe of interest: github.com/chrissound/MoscoviumOrange. Jun 11 '20 at 10:34
  • @ChrisStryczynski is your program haskel-based? I am on ubuntu, how can I install it and what advantages do I have with your program?
    – Timo
    Apr 28 at 7:28
  • Probably best to create an issue on there if you need help with installation. Advantages are logging the path, better search functionality, color highlighting and not shell dependent. Apr 28 at 11:54
99

I believe the HISTTIMEFORMAT is for Bash shells. If you're using zsh then you could use these switches to the history command:

Examples

$ history -E
    1   2.12.2013 14:19  history -E

Alternatively: \history -E

$ history -i
    1  2013-12-02 14:19  history -E

Alternatively: \history -i

$ history -D
    1  0:00  history -E
    2  0:00  history -i

If you do a man zshoptions or man zshbuiltins you can find out more information about these switches as well as other info related to history.

excerpt from zshbuiltins man page

Also when listing,
  -d     prints timestamps for each command
  -f     prints full time-date stamps in the US `MM/DD/YY hh:mm' format
  -E     prints full time-date stamps in the European `dd.mm.yyyy hh:mm' format
  -i     prints full time-date stamps in ISO8601 `yyyy-mm-dd hh:mm' format
  -t fmt prints time and date stamps in the given format; fmt is formatted 
         with the strftime function with the  zsh extensions described for 
         the %D{string} prompt format in the section EXPANSION OF PROMPT 
         SEQUENCES in zshmisc(1).  The resulting formatted string must be no 
         more than 256 characters or will not be printed.
  -D     prints elapsed times; may be combined with one of the options above.

Debugging invocation

You can use the following 2 methods to debug zsh when you invoke it.

Method #1

$ zsh -xv

Method #2

$ zsh
$ setopt XTRACE VERBOSE

In either case you should see something like this when it starts up:

$ zsh -xv
#
# /etc/zshenv is sourced on all invocations of the
# shell, unless the -f option is set.  It should
# contain commands to set the command search path,
# plus other important environment variables.
# .zshenv should not contain commands that produce
# output or assume the shell is attached to a tty.
#

#
# /etc/zshrc is sourced in interactive shells.  It
# should contain commands to set up aliases, functions,
# options, key bindings, etc.
#

## shell functions
...
...
unset -f pathmunge _src_etc_profile_d
+/etc/zshrc:49> unset -f pathmunge _src_etc_profile_d

# Created by newuser for 4.3.10
14
  • 7
    "event not found: -i " "event not found: -E". Do I need to load something in a config file before running these switches? Dec 2 '13 at 19:41
  • 1
    What version of zsh? zsh --version. I just confirmed on Ubuntu 12.10 that the commands I gave you worked just fine.
    – slm
    Dec 2 '13 at 19:52
  • 17
    @JohnMerlino I had zsh 4.3.10 (x86_64-unknown-linux-gnu) on a server for which I wanted to view history with timestamps. After looking through the zshbuiltins man page, I discovered that I needed to use fc. What finally worked for me was fc -li. You can pass command numbers to fc, too, so fc -li -100 lists the last 100 commands in your history. Jul 23 '14 at 13:11
  • 23
    I have to use \history -E, I use oh-my-zsh
    – sites
    Sep 25 '14 at 22:30
  • 2
    It's a long-standing (6+ years) bug with oh-my-zsh, see this issue on github: github.com/robbyrussell/oh-my-zsh/issues/739
    – rococo
    Jun 24 '18 at 20:28
24

history -E or history -i or whatever DO NOT work for me.

zsh --version shows that zsh 4.3.6 (x86_64-suse-linux-gnu).

Then fc -li 100 works! It shows the recent 100 commands with timestamp :)

7
  • Thanks, this worked for me as well, contrary to the top answer. My version is: zsh 5.1.1 (x86_64-ubuntu-linux-gnu). And while I'm here: do you know how to get the help of the command fc? Neither man fc nor fc --help work
    – exhuma
    Jun 13 '17 at 6:49
  • @exhuma why not google it :) Jun 14 '17 at 8:57
  • @Gab是好人 do you have history aliased? if you are using oh-my-zsh the history command is add the -l flag in one of the options. see github.com/robbyrussell/oh-my-zsh/blob/master/lib/…
    – Mike D
    Jun 19 '17 at 12:51
  • 1
    fc -lf will show a full timestamp. Note that this works only on zsh, not on bash.
    – dr_
    Jul 27 '17 at 7:49
  • @exhuma In zsh, you can use run-help fc.
    – xuhdev
    Oct 28 '17 at 20:37
8

If you are using oh-my-zsh addon in zsh, history -E or history -i wont work (because it's aliased to fc -l 1).

As @juanpastas pointed out, try

\history -E

or

\history -i

or

fc -li 100

3
  • 1
    I just added: 'alias history="fc -li 1"' to redefine the history alias into my ~/.zshrc file and it's now working as desired!
    – user886869
    Jun 8 '19 at 23:14
  • or even better: 'alias history="history -i". That way you can run the same command in the alias, and if you want to add more keys/options it is not that confusing.
    – DrBeco
    Oct 7 '19 at 20:36
  • history in omz is aliased to omz_history which uses fc (-l) $@, here and not fc -l 1 but maybe 1 means show all entries.
    – Timo
    Apr 28 at 14:48

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.