Bash-Verlauf mit Zeitstempeln

14

Ich möchte Zeitstempel für die in meiner Bash $ HISTFILE protokollierten Befehle behalten. Ist das möglich?

Ich habe es nicht geschafft, es man bashals Informationsquelle einzurichten .

Meine anderen Optionen sind wie folgt:

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

Ich hätte erwähnen sollen, dass ich auf OS X Mountain Lion bin (seufz). uname -agibt mir:

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

und echo $BASH_VERSIONgibt mir:

3.2.48(1)-release

Versuchte dies hinzuzufügen:

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

und diese Art von Zeitstempeln wird nur den Befehlen vorangestellt:

#1349057791

Ich versuche, die Variable ( echo $HISTTIMEFORMAT) zurückzugeben, sie hat den richtigen Wert.

Interessant!

Ich habe sogar .profile komplett entfernt, um dies zu debuggen. Immer noch nur lustige Zeitstempel:

#1349058320

Ich weiß nicht, wie ich das weiter beheben soll ... :(

Lösung : Ich habe ein Skript verwendet, das die $ HISTFILE direkt liest, nicht den integrierten Verlauf, sodass der epochenbasierte Zeitstempel (Sekunden seit UTC (Coordinated Universal Time) vom 1. Januar 1970) nicht mit der Datumsformatierungszeichenfolge übersetzt wurde . Plain-old historyfunktioniert gut, ich werde das stattdessen verwenden.

Robottinosino
quelle
2
Haben Sie versucht, Einstellungen vorzunehmen HISTTIMEFORMAT?
Jw013
Wahrscheinlich verstehe ich das Strftime-Format falsch. Es wäre hilfreich, wenn die Manpage mindestens ein paar Beispiele enthalten würde. +% Y-% m-% d% H-% M-% S?
Robottinosino

Antworten:

14

Ja, setzen Sie dies in ~/.bashrc:

export HISTTIMEFORMAT='%F %T '

Führen Sie dann die folgenden Befehle aus:

. ~/.bashrc
history

Es wird so aussehen:

 (...)
 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
 (...)

Erläuterungen zur Ausgabe:

  • first col ist das Unikat id
  • Das zweite ist das Datum, das dritte die Stunde
  • Neueste ist Ihre Kommandozeile
Gilles Quenot
quelle
3
Nein, funktioniert nicht unter OSX .. :( Wahrscheinlich ist das das Problem. Ein seltsames Betriebssystem.
Robottinosino
Wissen Sie source ~/.bashrc?
Gilles Quenot
Ich habe es definitiv getan. Es tut "etwas": Hinzufügen einer kommentierten Zeile vor dem Befehl mit einem numerischen Zeitstempel: # 1349057149
Robottinosino
1
@Robottinosino Ja, die kommentierte Zeile entspricht dem erwarteten Format. Verwenden historySie zum Anzeigen der Befehle mit formatierter Zeit den integrierten Befehl und sehen Sie sich die Verlaufsdatei nicht direkt an.
Jw013
1
Kann der Zeitstempel in der Verlaufsdatei mit HISTTIMEFORMAT aufgezeichnet werden? Ich benutze den historyBefehl nie , sondern benutze einen Texteditor, um die von mir gesuchten Befehle zu finden, und es wäre schön, wenn ich eine vom Menschen lesbare Datumsreferenz hätte.
gegangen