1) при выходе, баш просто пишет все выполняемые команды в $HISTFILE файл (по умолчанию это ~/.bash_history.
До выхода история хранится в памяти, и параметры HISTSIZE и HISTFILESIZE могут быть разными.
Можно сбросить текущую историю из памяти в файл командой history -a
2), 3). вы можете попробовать добавить нужные команды в prompt, тогда при выполнении любой команды будет выполняться блок ваших команд. Но это несколько костыльное решение. Например добавить history -a в PROMPT_COMMAND, чтобы хистфайл обновлялся после каждой команды. можно добавить туда и вывод history 1 с перенаправлением в скрипт, который отправляет почту, но это вызовет задержку на выполнение каждой команды. лучше из отдельной сессии следить за этим файлом.