History command showing the directory and the date

10,994

Solution 1

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

Solution 2

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
Share:
10,994

Related videos on Youtube

Apahidean Iancu
Author by

Apahidean Iancu

Updated on September 18, 2022

Comments

  • Apahidean Iancu
    Apahidean Iancu over 1 year

    Is there a way to have in the .bash_history file, listed: the directory where the command has been typed, the date, and the command ?

  • Apahidean Iancu
    Apahidean Iancu over 10 years
    ok.. but I really really need a way to have the directory where the command has been typed. Is there a way to do that?
  • Radu Rădeanu
    Radu Rădeanu over 10 years
    @ApahideanIancu First reopen your terminal or source ~/.bashrc, then you should run history command to see the result.
  • Radu Rădeanu
    Radu Rădeanu over 10 years
    @ApahideanIancu Also, the history commands will all be merged and written to the common ~/.bash_history file once you exit from the terminal. The times will be saved in ~/.bash_history in unix time format (each line where the time is saved will look something like: #1384343470).