设置HISTFILE变量时,历史命令不起作用

时间:2017-03-08 15:35:35

标签: linux bash .bash-profile

我们有一个常见的Linux测试环境,其中有多个人工作(使用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}"时,它开始工作,但

  1. HISTFILE未实时更新;它只在激活退出命令时更新。

  2. 如果用户通过右键单击并使用disconnect选项断开putty会话,则HISTFILE根本不会更新。 :(

  3. PS: - 如果我发表评论export HISTFILE,它会存储到.bash_history文件,一切顺利,.bash_history会实时更新,但我不会从中获取tty id或IP哪个命令被解雇

    O.S: - 红帽企业Linux服务器版本6.8(圣地亚哥)

1 个答案:

答案 0 :(得分:0)

更换

touch $HOME/HISTORY/${WHOAMI}/${DAY}/.HIST_${MYTTY}_${DATE}

printf "#`date '+%s'`\nll\n" > $HOME/HISTORY/${WHOAMI}/${DAY}/.HIST_${MYTTY}_${DATE}

诀窍,所以似乎只有在HISTFILE文件中有一些数据时,历史命令才能实时正确地更新它,否则只有在触发exit命令时才更新它。