带时间戳的 Bash 历史记录

带时间戳的 Bash 历史记录

我想保留 Bash $HISTFILE 中记录的命令的时间戳,这可能吗?

我没有设法将其设置man bash为信息源。

我的其他选择如下:

function thebanana() {
  local -r -a bash_commands=(
    "ls"
    # ... more coconut commands
  )
  for bash_command in "${bash_commands[@]}"; do
    printf "${bash_command}"
    printf ":"
  done
}
export HISTFILE=banana
export HISTIGNORE="$(thebanana)"
export HISTSIZE=999999
export HISTFILESIZE=999999999
export HISTCONTROL=ignoredups:erasedups

我应该提到我使用的是 OS X Mountain Lion(叹气)。uname -a给我:

Darwin CoconutMac.local 12.2.0 Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64

echo $BASH_VERSION给我:

3.2.48(1)-release

尝试添加这个:

export HISTTIMEFORMAT='%b %d %I:%M:%S %p '

它只为命令添加这种时间戳前缀:

#1349057791

我尝试回显变量 ( echo $HISTTIMEFORMAT),它具有正确的值。

有趣的!

我什至完全删除了 .profile 来调试它。仍然只有有趣的时间戳:

#1349058320

我不知道如何进一步解决这个问题...:(

解决方案:我使用的脚本直接读取 $HISTFILE,而不是内置历史记录,因此基于纪元的时间戳(自 1970 年 1 月 1 日协调世界时 (UTC) 以来的秒数)未使用日期格式字符串进行转换。普通旧的history效果很好,我会用它来代替。

答案1

是的,将其放入~/.bashrc

export HISTTIMEFORMAT='%F %T '

然后,运行以下命令:

. ~/.bashrc
history

它看起来像这样:

 (...)
 5200  2012-09-30 23:55:37 find -printf '%Ts %f\n'
 5201  2012-10-01 00:00:58 ls
 5202  2012-10-01 00:03:45 cd
 (...)

输出的解释:

  • 第一列是唯一的id
  • 第二个是日期,第三个是小时
  • 最新的是你的命令行

相关内容