12

I saw the option extended_history and saw it being used as in Per-directory history in zsh but haven't really understood what does extended_history actually do ?

What info. would become available in zsh_history which otherwise wouldn't if this option is not set.

From http://zsh.sourceforge.net/Doc/Release/Options.html#Options it says about -

EXTENDED_HISTORY <C> Save each command’s beginning timestamp (in seconds since the epoch) and the duration (in seconds) to the history file. The format of this prefixed data is: ‘: <beginning time>:<elapsed seconds>;<command>’. 

But I don't see any benefit to it at least while running the history command -

 shirish@debian ~ % history | grep tail -5 601* exit 602* history 603* exit 604 cd 605 cat ~/.zsh/.zshrc 606 tail -5 history 

This is how my ~/.zsh/.zshrc is set up -

shirish@debian ~ % cat ~/.zsh/.zshrc # Lines configured by zsh-newuser-install HISTFILE=~/.zsh//.histfile HISTSIZE=1000 SAVEHIST=100000 setopt inc_append_history autocd nomatch notify share_history extended_history bindkey -e # End of lines configured by zsh-newuser-install # display how long all tasks over 10 seconds take export REPORTTIME=10 # The following lines were added by compinstall zstyle :compinstall filename '/home/shirish/.zsh//.zshrc' autoload -Uz compinit promptinit compinit promptinit # End of lines added by compinstall prompt adam1 

I didn't see any difference either after setting the option or taking it out, no meaningful difference.

shirish@debian ~ % cat ~/.zsh/.zshrc | grep setopt setopt inc_append_history autocd nomatch notify share_history extended_history shirish@debian ~ % source ~/.zsh/.zshrc shirish@debian ~ % history -E 337 11.1.2018 23:33 history | grep apg 338 11.1.2018 23:33 man apg 339 11.1.2018 23:33 cd 340 11.1.2018 23:33 apg -a 1 -M n -n 3 -m 20 341 11.1.2018 23:33 apg -a 1 -M SNCL -n 3 -m 20 342 11.1.2018 23:33 history 343 11.1.2018 23:33 history -E 344 11.1.2018 23:33 leafpad ~/.zsh/.zshrc 345 11.1.2018 23:33 cat ~/.zsh/.zshrc 346 11.1.2018 23:33 source ~/.zsh/.zshrc 347 11.1.2018 23:33 history -E 348 11.1.2018 23:33 exit 349 11.1.2018 23:33 history -E 350 11.1.2018 23:34 leafpad ~/.zsh/.zshrc 351 11.1.2018 23:35 cat ~/.zsh/.zshrc | grep setopt 352 11.1.2018 23:35 source ~/.zsh/.zshrc shirish@debian ~ % leafpad ~/.zsh/.zshrc shirish@debian ~ % source ~/.zsh/.zshrc shirish@debian ~ % history -E 340 11.1.2018 23:33 apg -a 1 -M n -n 3 -m 20 341 11.1.2018 23:33 apg -a 1 -M SNCL -n 3 -m 20 342 11.1.2018 23:33 history 343 11.1.2018 23:33 history -E 344 11.1.2018 23:33 leafpad ~/.zsh/.zshrc 345 11.1.2018 23:33 cat ~/.zsh/.zshrc 346 11.1.2018 23:33 source ~/.zsh/.zshrc 347 11.1.2018 23:33 history -E 348 11.1.2018 23:33 exit 349 11.1.2018 23:33 history -E 350 11.1.2018 23:34 leafpad ~/.zsh/.zshrc 351 11.1.2018 23:35 cat ~/.zsh/.zshrc | grep setopt 352 11.1.2018 23:35 source ~/.zsh/.zshrc 353 11.1.2018 23:35 history -E 354 11.1.2018 23:36 leafpad ~/.zsh/.zshrc 355 11.1.2018 23:36 source ~/.zsh/.zshrc shirish@debian ~ % cat ~/.zsh/.zshrc | grep setopt setopt inc_append_history autocd nomatch notify share_history 

As can be seen there doesn't seem to be any difference.

% zsh --version zsh 5.4.2 (x86_64-debian-linux-gnu) 
6
  • FYI zsh.sourceforge.net/Doc/Release/… Commented Jan 11, 2018 at 9:44
  • @counglm, I added a bit more info. so now it might make it easier to understand why it doesn't seem to help in anyway. Commented Jan 11, 2018 at 13:33
  • what happens if you put -E on the history command to show the timestamps when EXTENDED_HISTORY is on or off between different invocations of the shell? Commented Jan 11, 2018 at 14:45
  • I don't see a difference in either way. I'll add it to the question as well. Commented Jan 11, 2018 at 18:04
  • @shirish Can you start a clean shell session and retry? Commented Jan 12, 2018 at 2:16

2 Answers 2

7

The output of history -E will always be the same regardless of the EXTENDED_HISTORY option. The duration of the command is stored directly in the history file (just examine the file to see the values).

However, another gotcha is that there are a few options that will override this behavior. You can test to see if it is working by running a command like sleep 3, which should result in an entry that looks like this:

pol@host ~ $ sleep 3 pol@host ~ $ tail -1 ${HISTFILE} : 1530663493:3;sleep 3 pol@host ~ $ setopt | grep hist extendedhistory histignoredups incappendhistorytime 

You can see that the "duration" value is 3. If it is not 3, then it is likely that you have another option set that is preventing EXTENDED_HISTORY from working. These include SHARED_HISTORY and INC_APPEND_HISTORY. If you need the former, then you are out of luck. For the latter one, there is an alternative INC_APPEND_HISTORY_TIME that you can use instead if you want to also have EXTENDED_HISTORY values (as I have above).

4

I will note that answer in https://unix.stackexchange.com/a/453336/277040 is slightly misleading. Indeed, the output format of history -E will be the same regardless of the EXTENDED_HISTORY status, but the timestamps will be relatively meaningless if unsetopt EXTENDED_HISTORY was always the case for your Zsh sessions. Each line of the HISTFILE will contain a command without any timestamp info, so history -E outputs the same time for all of these commands (the time that particular shell was opened and the HISTFILE was read into it's memory).

For example, given ~/.zsh_history containing commands executed at different hours in the past:

echo 1 echo 3 echo 5 

When I open a shell at 5:03 pm on the day I wrote this answer, history -E outputs:

 1 24.6.2020 17:03 echo 1 2 24.6.2020 17:03 echo 3 3 24.6.2020 17:03 echo 5 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.