我有.bash_profile设置导出到历史文件:
export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')
然后我将导出历史命令的时间戳。
export HISTTIMEFORMAT="%Y/%m/%d %T "
此组合导致将纪元时间戳写入历史文件:
#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
如何在不导致history命令报告这些不需要的行的情况下,按照我的意愿写入文件?
注意 - 这个带有历史命令的异常似乎是"激活"当我登录系统时。 (我使用ssh)我可以在会话中,运行10个命令,然后运行历史命令,所有看起来都正常。但是,只要注销并重新登录并运行历史命令,它就会显示错误的行。
更新:我已将问题缩小到该行:
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"
当我注释掉这一行时,history命令按预期工作。但是,这也是在历史文件上运行格式的命令。我试图删除"历史-a"部分来自线路,留下其余部分,但这没有任何区别。如果我要将整行注释掉,我怎样才能使用perl脚本调用文件格式?
答案 0 :(得分:2)
我创建了一个类似的功能(前一段时间),它可以实现我想要的功能:
# export detailed history
exphtd () { HISTTIMEFORMAT='%F %T ' history | grep -v "^#" > /root/history/.bash_hist ; }
然后使用:
$ exphtd
<强>输出:强>
455 2016-05-20 15:12:46 cd ~