在 CentOS 6.2 和 Bash 4.1.2(1) 上,我添加了一个文件,其中/etc/profile.d
包含:
HISTTIMEFORMAT='%c : '
history -s "# some text as a marker"
只要变量被设置并且标记被写入用户的历史列表(以及~/.bash_history
他们何时exit
),这就有效。
问题是:
history -s
添加标记时不添加时间戳- 向后滚动历史记录在标记处停止(
~/.bash_history
文件不会读入内存) - 标记评论的历史条目有“??”而不是(丢失的)时间戳
我尝试添加:
history -s "#$(date +%s)"
在另一个history -s
命令之前,但 Bash 将此视为历史中的命令而不是时间戳,即使它的格式相同。
另一种选择是将标记和时间戳直接附加到~/.bash_history
,但是当稍后附加时,它们与会话历史记录中的活动不连续。由于其他用户或单个用户的多个会话,可能会在标记及其相关会话之间附加其他会话。
有什么办法可以解决这些问题吗?
更新:
我尝试添加set -o history
(并删除了该history -s "#$(date +%s)"
行),它似乎解决了上面提到的历史滚动问题,但缺少时间戳仍然是一个问题。
答案1
我把这个问题发布在帮助 bash 邮件列表并得到了维护者 Chet Ramey 的回复重击。
他建议在命令之前添加以下任一内容history -s
:
set -H # aka set -o histexpand
或者
histchars='!^#'
我尝试了它们,它们都有效。原因是#
在配置文件代码运行时尚未设置默认的历史注释字符,因此为 null ( \0
)。
这是我的工作文件:
HISTTIMEFORMAT='%c : '
histchars='!^#'
set -o history
history -s "# some text as a marker"