2016-07-20 12 views
1

Ich möchte ein kleines Skript für die Fischschale folgenden diesen Artikel schreiben - How (and Why) to Log Your Entire Bash History.Fisch Shell Auditing

Einschränkungen:

  1. ich keine BASH PROMPT_COMMAND Äquivalent in Fisch gefunden.
  2. Ich benutze eine benutzerdefinierte Oh My Fish Prompt. Es wäre toll, wenn ich die benutzerdefinierte Fischaufforderung nicht ändern müsste.

Antwort

8

Sie gehen das in die falsche Richtung. Sie möchten alle eingegebenen Befehle protokollieren? Fish behält standardmäßig die letzten 256k deduplizierten Einträge aus allen Sitzungen bei, sodass Sie eigentlich nichts tun müssen.

Wenn Sie ein PROMPT_COMMAND Äquivalent wollte, na ja, eine Aufforderung zur Anzeige gibt es die fish_prompt Funktion (die Sie bereits angepasst haben), und etwas anderes jedes Mal zu tun, eine Eingabeaufforderung angezeigt gibt es die fish_prompt Ereignis, das Sie einen Listener definieren für wie

function name --on-event fish_prompt 
    # do stuff 
end 

Wenn Sie alles, melden Sie sich auf eine andere Datei ausführen, gibt es die fish_preexec Ereignis, so

function log_commands --on-event fish_preexec 
    # fish_preexec functions receive the commandline as the argument (see `function --help`) 
    echo $argv >> ~/fish.log 
end 

funktionieren würde.

+1

Um dies zu erweitern, zeichnet Fisch bereits Ihre gesamte Geschichte, und Sie können es mit 'Geschichte' zugreifen. Fisch fasst auch mehrere Sitzungen zu einer einzigen Verlaufsdatei zusammen, was die Hauptbeschränkung der Bash-Historie ist. –

+0

Vielen Dank für die Antworten - das war hilfreich. Beachten Sie, dass das Ziel der Protokollierung aller Befehle (einschließlich Duplikate) darin besteht, eine Prüfung der im Artikel erwähnten Arten durchzuführen und 'fish_history' nicht zu ersetzen. – neowulf33