I came across an interesting blog entry about maintaining a persistent history of commands across multiple bash sessions using some features of bash I was unaware of.
First there was a variable PROMPT_COMMAND which will run the command stored in the variable before presenting the new prompt.
Then there was the BASH_REMATCH variables, which store substring patterns when used with [[ ... ]] e.g.
test_string="Random string of numbers : 1234"
[[
$test_string =~ (.*)\:\ +([0-9]+)
]]
echo ${BASH_REMATCH[0]}
echo ${BASH_REMATCH[1]}
echo ${BASH_REMATCH[2]}
This snippet will output the following
Random string of numbers : 1234
Random string of numbers
1234
I have simplified the example from Eli's blog as I am not using the same format for history output , so my code in .bashrc looks like
log_bash_history()
{
[[
$(history 1) =~ ^\ *[0-9]+\ +(.*)$
]]
local command="${BASH_REMATCH[1]}"
if [ "$command" != "$HISTORY_LAST" ]
then
echo "$command" >> ~/.persistent_history
export HISTORY_LAST="$command"
fi
}
export PROMPT_COMMAND=log_bash_history