我们有一个通用的Linux测试ENV,其中有多个人工作(使用Putty通过SSH连接),我们需要存储从所有终端发射的命令的要求,以便我们可以跟踪每个命令,并通过哪个IP/用户和哪个tty触发,以便我们可以使用'last'命令对其进行验证。
我已经更改了我的.bash_profile
# Will Give me ip of person logged in
WHOAMI=`who -m | cut -d '(' -f 2| cut -d ')' -f1`
# Will give me tty ID
MYTTY=`who -m | awk '{print $2;}' | cut -d '/' -f2`
DATE=`date +"%Y_%m_%d_%H%M%S"`
DAY=`date +"%Y_%m_%d"`
shopt -s histappend
mkdir -p $HOME/HISTORY/${WHOAMI}/${DAY}
touch $HOME/HISTORY/${WHOAMI}/${DAY}/.HIST_${MYTTY}_${DATE}
export HISTTIMEFORMAT='%F %T '
export HISTFILESIZE=100
export HISTSIZE=100
# stores history file per terminal
export HISTFILE=$HOME/HISTORY/${WHOAMI}/${DAY}/.HIST_${MYTTY}_${DATE}
export PS1='[[e[4;32m]u@h[e[0m] [e[1;36m]$PWD[e[0m]]! $'
# Updates the HISTFILE at real time i.e. when user presses enter
export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}"
history -r $HISTFILE
更改.bash_profile
后,history
命令停止显示以前的条目。
当我将PROMPT_COMMAND
更改为"history -a; history -r; ${PROMPT_COMMAND}"
时,它开始工作,但
HISTFILE
未实时更新;它仅在发出退出命令时才更新。如果用户通过右键单击断开腻子会话并使用Disconnect选项,则根本不更新
HISTFILE
。:(
p.s: - 如果我注释export HISTFILE
,它将其存储到.bash_history
文件,并且一切正常工作,并且.bash_history
实时更新,但是我没有获得命令命令的TTY ID或IP
o.s: - 红色帽子企业Linux服务器版本6.8(Santiago)
更换
touch $HOME/HISTORY/${WHOAMI}/${DAY}/.HIST_${MYTTY}_${DATE}
printf "#`date '+%s'`nlln" > $HOME/HISTORY/${WHOAMI}/${DAY}/.HIST_${MYTTY}_${DATE}
做到了这个技巧,因此似乎只有在历史程序文件中有一些数据时,历史记录命令才能实时正确更新它,否则才会在触发exit命令时才对其进行更新。