附加到history命令的.bash_profile中的历史文件的perl脚本



我有.bash_profile设置来导出到历史文件:

export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')

然后我将导出历史记录命令的时间戳。

export HISTTIMEFORMAT="%Y/%m/%d %T "

这种组合导致epoch时间戳被写入历史文件:

#1463962023
top

因此,我在perl中向.bash_profile中写入了一行代码,只在文件中写入人类可读的时间戳,从而消除了epoch行:(和其他几行)

format_history () {
local file=/root/history/.bash_hist-$(who -m | awk '{print $1}')
perl -i -pe 's/^#(d{10})$/"# ".localtime($1)/e' "$file"
}
shopt -s histappend
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

所以现在我导出的文件是这样的:

# Sun May 22 19:06:41 2016
last

这太棒了,正是我想要的。然而,这有一个不必要的副作用,即在历史记录命令中添加一条专线,其中只包含不需要的日期。

824  2016/05/22 19:07:33 # Sun May 22 19:06:41 2016
825  2016/05/22 19:07:33 last

如何在不导致历史记录命令报告这些不需要的行的情况下,像我想要的那样写入文件?

注意-当我登录到系统时,这个带有历史记录命令的异常似乎被"激活"了。(我使用ssh)我可以在会话中,运行10个命令,然后运行history命令,一切看起来都很正常。但是,一旦注销并重新登录并运行历史记录命令,就会显示错误的行。

更新:我已经将问题缩小到以下行:

PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

当我注释掉这一行时,history命令按预期工作。但是,这也是在历史文件上运行格式化的命令。我试着把"历史-a"部分从台词中去掉,剩下的就留下来,但这并没有什么区别。如果我把整行注释掉,我怎么能使用perl脚本调用文件的格式呢?

我(不久前)创建了一个类似的函数,它可以满足您的需求,我想:

# export detailed history
exphtd () { HISTTIMEFORMAT='%F %T ' history | grep -v "^#" > /root/history/.bash_hist ; }

然后使用:

$ exphtd

输出:

455  2016-05-20 15:12:46 cd ~

相关内容

  • 没有找到相关文章

最新更新