History command showing the directory and the date

You CAN write the current working directory in a history file as well, but you have to make an own history file:

Write your .bashrc as follows:

export CUSTOM_HISTFILE="/tmp/bash_history" #path of the new history file
export PROMPT_COMMAND="history -a; history -c; history -r; date | xargs echo -n >>$CUSTOM_HISTFILE; echo -n ' - ' >>$CUSTOM_HISTFILE; pwd | xargs echo -n >>$CUSTOM_HISTFILE; echo -n ' - ' >>$CUSTOM_HISTFILE; tail -n 1 $HISTFILE >>$CUSTOM_HISTFILE; $PROMPT_COMMAND"

It's a bit circumstantial, but it works. An entry could look like this:

Mit Nov 13 13:44:39 CET 2013 - /home/test - ls -la

History command showing the directory: NO! :(

History command showing the date: YES! :)

That's because (from man history):

The history list is an array of history entries.  A  history  entry is
declared as follows:

   typedef void * histdata_t;

   typedef struct _hist_entry {
     char *line;
     char *timestamp;
     histdata_t data;
   } HIST_ENTRY;

So, nothing about the directory where the command has been typed.

To know the exact time certain command was executed, see help history:

If the $HISTTIMEFORMAT variable is set and not null, its value is used
as a format string for strftime(3) to print the time stamp associated
with each displayed history entry.  No time stamps are printed
otherwise.

So all you have to do is to set $HISTTIMEFORMAT something like this in the current shell:

export HISTTIMEFORMAT="%F %T "

To have it permanently set, run the following command:

echo 'export HISTTIMEFORMAT="%F %T "' >> ~/.bashrc

The above command will add a new line (export HISTTIMEFORMAT="%F %T ") at the end of your ~/.bashrc file.

Now, the output of history will look something like this:

 ...
 1613  2013-11-13 13:00:15 cat .bash_history
 1614  2013-11-13 13:01:04 man history
 1615  2013-11-13 13:11:58 help history
 1616  2013-11-13 13:19:07 ls
 1617  2013-11-13 13:19:09 cd
 1618  2013-11-13 13:19:15 history

Tags:

History