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:
Usage
edit- Basic example:
export PROMPT_COMMAND='history -a'
- Advanced examples:
echo 'export HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bash_profile
[5]export PROMPT_COMMAND='if [ "$(id -u)" -ne 0 ]; then echo "$(date "+%Y-%m-%d.%H:%M:%S") $(pwd) $(history 1)" >> ~/.logs/bash-history-$(date "+%Y-%m-%d").log; fi'
[6]- Sending history to syslog (needs recompiling source): Bash also support syslog capabilities at compiling time[7] but it is not enabled by default in most distributions: https://github.com/bminor/bash/blob/d233b485e83c3a784b803fb894280773f16f2deb/config-top.h
Logging
editIf 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- Install https://github.com/ohmybash bash customization
See also
edit- ↑ https://unix.stackexchange.com/questions/145250/where-is-bashs-history-stored
- ↑ https://www.gnu.org/software/bash/manual/bash.html#Bash-History-Builtins
- ↑ <https://www.gnu.org/software/bash/manual/bash.html#index-HISTFILE
- ↑ https://www.gnu.org/software/bash/manual/bash.html#index-HISTTIMEFORMAT
- ↑ https://www.cyberciti.biz/faq/unix-linux-bash-history-display-date-time/
- ↑ https://gist.github.com/NISH1001/bf2b713418b4e2ede8e6a7373b42c4c1
- ↑ https://unix.stackexchange.com/questions/457107/sending-bash-history-to-syslog