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