Sign up ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

I have been bashing my head to write a simple history script for the last two days. History is a shell-built in command I couldn't able to use that within a BASH script. So, Is there a way attain this using BASH script ?
Here we go my script for you:

history |  tail -100 > /tmp/history.log
cd /tmp
uuencode history.log history.txt  | mail -s "History log of server"
share|improve this question

3 Answers 3

Bash disables history in noninteractive shells by default, but you can turn it on.

set -o history
history | tail …

But if you're trying to monitor activity on that server, the shell history is useless (it's trivial to run commands that don't show up in the history). See How can I log all process launches in Linux.

share|improve this answer

The history builtin seems to be disabled inside a shell script. See here:

I have not found any official documentation about this.

share|improve this answer

I'm not sure if it actually uses the history capability when running non-interactively, otherwise every shell script you run would clutter up your command history.

Why not go directly to the source ${HOME}/.bash_history, replace history | tail -100 with tail -100 ${HOME}/.bash_history. (If you use timestamps you'd probably have to do something along the lines of grep -v ^# ${HOME}/.bash_history | tail -100).

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.