web-dev-qa-db-ja.com

タイムスタンプ付きの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マウンテンライオン(ため息)にいると述べたはずです。 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は問題なく動作します。代わりにそれを使用します。

15
Robottinosino

はい、これを~/.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
  • 2番目は日付、3番目は時間です
  • 最新はあなたのコマンドラインです
15
Gilles Quenot