ubuntuusers.de

BASH: Script für BASH-History mit TimeStamp und Exit-Code

Status: Ungelöst | Ubuntu-Version: Kubuntu 20.04 (Focal Fossa)
Antworten |

michahe

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Hallo,

ich möchte ein BASH-Script, um die BASH-History einschließlich TimeStamp und Exit-Code in eine Datei zu speichern. Ich denke an folgende Befehle:

history                          # Einfache liste ohne Zeitstempel
export HISTTIMEFORMAT='%F %T '   # Zeitstempel einschalten
export HISTTIMEFORMAT=''         # Zeitstempel ausschalten

Aus dem UU-Wiki: Was ist gemeint mit

Allerdings sollte beachtet werden, dass Zeitstempel nicht rückwirkend gesetzt werden können, wodurch diese bei bereits in der Historie befindlichen Einträgen nicht zutreffend sind.

Ich habe soeben erstmals den Zeitstempel eingeschaltet und erhalte sinnvolle Zeiten für alle 500 gelieferten Kommandos.

Wie kann ich auch den Exit-Code des Kommandos in der jeweiligen Zeile hinzufügen? Weitere Verbesserungsvorschläge?

Danke, Michael

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1246

Hallo michahe,

ich denke, mit deinem Wunsch, den Exit Status mit in die History aufzunehmen, wirst du nicht erfolgreich sein.

Der Exit Status liegt erst nach Beendigung des Befehls vor. Die Command-Line wird vor der Ausführung in den History-Memory-Bereich geschrieben. Dabei wird auch der Zeitstempel vermerkt. Dieser Memory-Bereich wird bei Beendigung deiner Terminal-Session in die ~/.bash_history Datei geschrieben oder wenn du ein "history -w" absetzt. Hattest du zuvor einen Wert für HISTTIMEFORMAT gesetzt, wird beim Speichern in die z.B. ~/.bash_history Datei der Timestamp (%s) als Kommentar (#) vor den abgespeicherten Befehl geschrieben und später bei Bedarf ausgewertet.

Das zusätzliche Speichern des Exit Status würde eine Änderung des bash Programms (SHELL BUILTIN COMMAND) erfordern. Das geht, ist aber kein dünnes Brett.

PS:

Aus dem UU-Wiki: Was ist gemeint mit

Allerdings sollte beachtet werden, dass Zeitstempel nicht rückwirkend gesetzt werden können, wodurch diese bei bereits in der Historie befindlichen Einträgen nicht zutreffend sind.

Wie du gesehen hast, sind alle Befehle vor dem Setzen von HISTTIMEFORMAT, die aus der History-Datei gelesen wurden (~./bash_history) auf dem gleichen Zeitstempel. In der History-Datei gibt es ja keine Einträge der Form "^#%s" weshalb der Zeitstempel der Datei für die leeren Einträge verwendet wird. Das ist mit der Bemerkung gemeint.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

Man kann Exit-Codes vom PROMPT_COMMAND mitloggen lassen: https://stackoverflow.com/a/62203206 - das muss man dann halt noch irgendwie mit der Bash-History zusammenführen.

michahe

(Themenstarter)

Anmeldungsdatum:
12. Dezember 2013

Beiträge: 857

Danke shiro und seahawk1986,

das schaut sehr kompliziert aus, zumindest für mich kaum lösbar. Ich hatte diesen Artikel "Atuin" von Ferdinand Thommes gelesen (Schwerpunkt Exit-Code auf Seite 2) und hoffte auf eine leichte Übung ...

Antworten |