Bash programming/Bash History

Bash Command history feature allows to recall, edit and rerun previous commands. Also allows commands to be saved using the history -a command[1][2].

Variables to control Bash History:

  • HISTFILE[3]: The default value is ~/.bash_history
  • HISTFILESIZE
  • HISTTIMEFORMAT[4]

Usage

edit
  • Basic example:
export PROMPT_COMMAND='history -a'
  • Advanced examples:

Logging

edit

If you wish to keep a record of your commands, you can configure bash to write a log file of entered commands.

Logging can be set up automatically by running these commands:

echo "local6.debug /var/log/commands.log" |sudo tee -a /etc/rsyslog.d/bash.conf >>/dev/null
echo "export PROMPT_COMMAND='"RETRN_VAL=\$?\;logger -p local6.debug "\"\$(whoami) \$(tty) \$(pwd) [\$\$]: \$(history 1 | sed \"s/^[ ]*[0-9]\\+[ ]*//\" ) [\$RETRN_VAL]"\"\' >>~/.bashrc
systemctl restart rsyslog
  • The first line creates a configuration file for rsyslog contaning the log file destination /var/log/commands.log, which may be changed as desired. The >>/dev/null part prevents redundantly outputting the text into the command line window.
  • The second adds the log line definition export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) $(tty) $(pwd) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"' to ~/.bashrc, which runs upon each start of the terminal.
  • The third line restarts the rsyslog service to make the changes effective.

Activities

edit
  1. Install https://github.com/ohmybash bash customization

See also

edit
  1. https://unix.stackexchange.com/questions/145250/where-is-bashs-history-stored
  2. https://www.gnu.org/software/bash/manual/bash.html#Bash-History-Builtins
  3. <https://www.gnu.org/software/bash/manual/bash.html#index-HISTFILE
  4. https://www.gnu.org/software/bash/manual/bash.html#index-HISTTIMEFORMAT
  5. https://www.cyberciti.biz/faq/unix-linux-bash-history-display-date-time/
  6. https://gist.github.com/NISH1001/bf2b713418b4e2ede8e6a7373b42c4c1
  7. https://unix.stackexchange.com/questions/457107/sending-bash-history-to-syslog