Bash

帶有時間戳的 Bash 歷史記錄

  • October 1, 2012

我想在我的 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工作正常,我會用它來代替。

是的,把它放進去~/.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
(...)

輸出說明:

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

引用自:https://unix.stackexchange.com/questions/49559