带有时间戳的 Bash 历史记录

Rob*_*ino 15 osx bash command-history

我想在我的 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
Run Code Online (Sandbox Code Playgroud)

我应该提到我在 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
Run Code Online (Sandbox Code Playgroud)

echo $BASH_VERSION给我:

3.2.48(1)-release
Run Code Online (Sandbox Code Playgroud)

尝试添加这个:

export HISTTIMEFORMAT='%b %d %I:%M:%S %p '
Run Code Online (Sandbox Code Playgroud)

它只在命令前加上这种时间戳:

#1349057791
Run Code Online (Sandbox Code Playgroud)

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

有趣的!

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

#1349058320
Run Code Online (Sandbox Code Playgroud)

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

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

Gil*_*not 16

是的,把它放在~/.bashrc

export HISTTIMEFORMAT='%F %T '
Run Code Online (Sandbox Code Playgroud)

然后,运行以下命令:

. ~/.bashrc
history
Run Code Online (Sandbox Code Playgroud)

它看起来像这样:

 (...)
 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
 (...)
Run Code Online (Sandbox Code Playgroud)

输出说明:

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

  • 不,在 OSX 上不起作用 .. :( 这就是问题所在。一个奇怪的操作系统。 (4认同)