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

附加到history命令的.bash_概要文件中的历史文件的perl脚本,bash,perl,Bash,Perl,我有.bash_配置文件设置要导出到历史文件: export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}') #1463962023 top 然后,我将为history命令导出时间戳 export HISTTIMEFORMAT="%Y/%m/%d %T " 此组合导致将历元时间戳写入历史文件: export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{pr

我有.bash_配置文件设置要导出到历史文件:

export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')
#1463962023
top
然后,我将为history命令导出时间戳

export HISTTIMEFORMAT="%Y/%m/%d %T "
此组合导致将历元时间戳写入历史文件:

export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')
#1463962023
top
因此,我在.bash_概要文件中编写了一个perl one liner,以便只在文件中写入人类可读的时间戳,从而消除了历元线:(和其他几行)

现在我导出的文件如下所示:

# Sun May 22 19:06:41 2016
last
这很好,正是我想要的。但是,这有一个不必要的副作用,即在history命令中附加一个专用行,该行只包含不需要存在的日期

 824  2016/05/22 19:07:33 # Sun May 22 19:06:41 2016
 825  2016/05/22 19:07:33 last
如何在不导致history命令报告这些不需要的行的情况下,像我想要的那样写入文件

注意-当我登录到一个系统时,这个带有history命令的异常似乎被“激活”。(我使用ssh)我可以在会话中运行10个命令,然后运行history命令,所有这些看起来都正常。但是,一旦注销并重新登录并运行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 ~

不清楚这是不是你想要的;导出没有[num]的bash历史记录似乎有点无用。我将研究您的建议。不过,我希望使用perl脚本实现这一点。我已经将问题缩小到“PROMPT_COMMAND”行,但是当我在.bash_profile中对此进行注释时,格式不会在文件上运行。但是,当您说“Then to use”时,我正在尝试您的建议运行exphtd您是在源文件之后在命令行执行一次,还是每次登录时都必须执行此操作?我认为
历史记录-a结尾处的
$PROMPT\u命令
;格式与历史$PROMPT_命令
可能导致您的问题;尝试移除它(很抱歉,我无法在atm机上测试它,因为我不在我的机器周围)。如果函数中的perl行只是转换日期,您只需执行
HISTTIMEFORMAT='%c'
,因为它应该将时间/日期转换为“国家表示”格式
exphtd
调用该函数(就像您的
format\u history
,我只是将它命名为其他名称)。我还不完全清楚你想要的确切格式是什么。