我设置了HISTTIMEFORMAT
变量来存储时间戳信息.bash_history
文件。如果我使用交互式 shell,我能够正确显示历史记录。
但是,当我运行 history 命令显示历史记录时,文件的时间戳信息.bash_history
显示为命令,并且所有命令的时间戳信息都设置为当前时间。
示例文件内容bash_history
::
#45556656
pwd
#45677756
ls
#45665765
who
命令:
$ ssh Host 'HISTFILE=~/bash_history;HISTTIMEFORMAT=" %F %T ";set -o history; history'
输出:
235 2015-08-24 13:12 #45556656
236 2015-08-24 13:12 pwd
237 2015-08-24 13:12 #45677756
238 2015-08-24 13:12 ls
问题: 1. 所有命令的时间戳相同。它设置为当前时间戳。
历史文件中的时间信息被读取为命令。因此丢失了命令的实际时间戳信息。当我尝试通过ssh
或获取信息时,如何获取正确的信息cronjob
。
笔记:我见过类似的问题,但没有一个能解决我的问题,也没有提出问题的人详细说明这种情况。
答案1
您还需要启用histexpand
,这允许正确解释时间戳,因为它们以历史注释字符为前缀:
$ ssh HOST 'HISTFILE=/tmp/bash_history;HISTTIMEFORMAT=" %F %T ";set -o histexpand -o history; history'
1 1971-06-12 01:37:36 pwd
2 1971-06-13 11:15:56 ls
3 1971-06-13 07:56:05 who
有关更多详细信息,请参阅手册页中的HISTTIMEFORMAT
和的描述。set -H
bash(1)
注意,顺序似乎很重要。以下是history
before发生的情况histexpand
:
$ ssh pocampo 'HISTFILE=/tmp/bash_history; HISTTIMEFORMAT=" %F %T ";set -o history -o histexpand; history'
1 ??#45556656
2 ??pwd
3 ??#45677756
4 ??ls
5 ??#45665765
6 ??who