Zeitstempel-Verlaufsdatei verursacht fehlerhafte Zeilen im Verlaufsbefehl

Zeitstempel-Verlaufsdatei verursacht fehlerhafte Zeilen im Verlaufsbefehl

Ich habe .bash_profile so eingerichtet, dass es in eine Verlaufsdatei exportiert wird:

export HISTFILE=/root/history/.bash_hist-$(who -m | awk '{print $1}')

Dann exportiere ich Zeitstempel für den Verlaufsbefehl.

export HISTTIMEFORMAT="%Y/%m/%d %T "

Diese Kombination führte dazu, dass Epochenzeitstempel in die Verlaufsdatei geschrieben wurden:

#1463962023
top

Also habe ich eine einzeilige Perl-Datei in .bash_profile geschrieben, um nur den für Menschen lesbaren Zeitstempel in die Datei zu schreiben und so die Epochenzeile zu eliminieren: (und einige andere Zeilen)

format_history () {
local file=/root/history/.bash_hist-$(who -m | awk '{print $1}')
perl -i -pe 's/^#(\d{10})$/"# ".localtime($1)/e' "$file"
}

shopt -s histappend
PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

Meine exportierte Datei sieht jetzt also folgendermaßen aus:

# Sun May 22 19:06:41 2016
last

Das ist großartig und genau das, was ich will. Dies hat jedoch den unerwünschten Nebeneffekt, dass dem Verlaufsbefehl eine dedizierte Zeile angehängt wird, die nur Daten enthält, die dort nicht vorhanden sein müssen.

 824  2016/05/22 19:07:33 # Sun May 22 19:06:41 2016
 825  2016/05/22 19:07:33 last

Wie kann ich wie gewünscht in die Datei schreiben, ohne dass der Verlaufsbefehl diese unerwünschten Zeilen meldet?

HINWEIS - Diese Anomalie mit dem Verlaufsbefehl scheint „aktiviert“ zu werden, wenn ich mich bei einem System anmelde. (Ich verwende SSH.) Ich kann in einer Sitzung sein, 10 Befehle ausführen, dann den Verlaufsbefehl ausführen und alles sieht normal aus. Sobald ich mich jedoch ab- und wieder anmelde und den Verlaufsbefehl ausführe, werden die fehlerhaften Zeilen angezeigt.

UPDATE: Ich habe das Problem auf die Zeile eingegrenzt:

PROMPT_COMMAND="history -a;format_history;$PROMPT_COMMAND"

Wenn ich diese Zeile auskommentiere, funktioniert der Verlaufsbefehl wie erwartet. Dies war jedoch auch der Befehl, der die Formatierung der Verlaufsdatei ausgeführt hat. Ich habe versucht, den Teil „history -a“ aus der Zeile zu entfernen und den Rest zu belassen, aber das macht keinen Unterschied. Wenn ich die ganze Zeile auskommentiert lassen würde, wie könnte ich dann die Formatierung der Datei mit dem Perl-Skript aufrufen?

Antwort1

Ich würde die Verlaufsdatei unverändert lassen und stattdessen die Aufzeichnung von Befehlen im prompt_command-Handler implementieren. Ich würde auch dafür sorgen, dass sie in eine private Protokolldatei geschrieben wird, dann gibt es keine Konflikte mit anderen Verwendungen der Verlaufsdatei oder Probleme mit anderen Benutzern, die auf /root zugreifen.

verwandte Informationen