天天看點

history在bash腳本中的用法

2014-03-18 wcdj

Question:

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:

#!/bin/bash
history |  tail -100 > /tmp/history.log
cd /tmp
uuencode history.log history.txt  | mail -s "History log of server" [email protected]
           

Answers:

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

#!/bin/bash
HISTFILE=~/.bash_history
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.

2 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

).

3 The history builtin seems to be disabled inside a shell script. See here: http://www.tldp.org/LDP/abs/html/histcommands.html

I have not found any official documentation about this.

參考

http://unix.stackexchange.com/questions/5684/history-command-inside-bash-script