fragen stichworte

Konfigurieren Sie den GNU-Bildschirm so, dass Befehlsverläufe in Dateien gespeichert werden

Ich möchte den GNU-Bildschirm so konfigurieren, dass er die Befehlshistorien aller verschiedenen Fenster in verschiedenen Dateien speichert.

Ich weiß standardmäßig, dass der GNU-Bildschirm die Befehlshistorien (seiner verschiedenen Fenster) überhaupt nicht in einer Datei speichert (sie speichert sie stattdessen im Speicher), aber es kann möglich sein, sie stattdessen in Dateien zu speichern?

Die verschiedenen Befehlsverlaufsdateien sollten die Namen <session>.<window>.history oder ähnliches haben.

Hat jemand eine Idee, wie das geht?

(Nur um es klar zu sagen: Ich möchte, dass jedes GNU-Bildschirmfenster eine andere Datei schreibt. Mir gefällt, dass jedes Fenster eine andere Historie hat und normalerweise verschiedene Arten von Befehlen in den verschiedenen Fenstern ausgeführt wird.)

antworten

Erstellen Sie ein Skript, das so aussieht.

~/bin/myshell

#!/bin/bash
HISTFILE=~/.bash_history_w$WINDOW
# HISTFILE=~/.bash_history_w${WINDOW}_s${STY##*.}  # with session name.
export HISTFILE
exec/bin/bash

Passen Sie Ihren .screenrc mit einer solchen Zeile an.

shell ~/bin/myshell

Thanks, but there is a problem: It seems the files don't actually get written until I close a window. In my case though, the windows will always be active and never closed. How can I trigger that the files get written without closing the windows?

Sie können das Schreiben manuell erzwingen, indem Sie den Befehl history -w ausführen. Ich glaube nicht, dass es eine Möglichkeit gibt, dass bash die Historie automatisch abgibt, außer beim Beenden. In zsh scheint dies eine Option zu sein, suchen Sie jedoch nach INC_APPEND_HISTORY.

Wenn Sie ein Protokoll der Aktivitäten pro Sitzung erstellen möchten, können Sie dazu das Skript verwenden. Wenn Sie das Skript pro Sitzung + Fensterprotokoll unter Skript erstellen möchten, können Sie myshell so anpassen.

#!/bin/bash
SHELL=/bin/bash  # reset the shell back to bash since screen -s will adjust to to myshell
export SHELL
script -a  -q -f ~/.sessionlog_w${WINDOW}_s${STY##*.}

Shell-Historie und screen -Protokoll sind zwei verschiedene Dinge. Eine Shell merkt sich Befehle, die Sie eingeben, während screen sich an alles erinnert: Befehle, die Sie eingeben und ihre Ausgabe (sogar die Eingabeaufforderung).

Wenn Sie den Verlauf von screen beibehalten möchten, können Sie dessen Protokollierungsfunktion verwenden. Fügen Sie am Ende Ihres ~/.screenrc die folgenden Befehle hinzu:

screen
screen $SHELL -c 'screen -X logfile "/tmp/$STY.%n.history"; screen -p 0 -X deflog on; screen -p 0 -X log on'