Leeren Sie den Verlauf in KSH nach jedem Befehl (oder beenden Sie die Aktualisierung).

Leeren Sie den Verlauf in KSH nach jedem Befehl (oder beenden Sie die Aktualisierung).

Ich habe gelesen, dass ksh im Gegensatz zu bash seinen Verlauf nach jedem Befehl leert. Das mag für viele gut sein, aber mich macht es wahnsinnig!

Ich habe mehrere Fenster geöffnet, die für ihre eigenen Aufgaben geöffnet sind, und die Freigabe dieses Verlaufs bringt den spezifischen Sitzungsverlauf von Befehlen durcheinander.

Gibt es eine Möglichkeit, dieses Leeren zu deaktivieren, sodass der Verlauf nur beim Abmelden an den Befehlsverlauf angehängt werden kann?

Oder gibt es vielleicht eine Möglichkeit, den Verlauf so anzufordern, dass der Befehlszeilenverlauf nicht jedes Mal aktualisiert wird?

Antwort1

Früher habe ich mehrere Shells in ausgeführt screen. In meiner .khsrc habe ich mehrere Einstellungen angepasst, darunter $PS1 und $HISTFILE (und den Basisnamen des TTY-Geräts eingefügt).

Dies ließ sich relativ einfach rekonstruieren:

tty=$(basename $(tty))
histdir=~/.hist
mkdir -p $histdir
export HISTFILE=$histdir/history.$tty
export PS1=$USER@'$PWD ['$tty'] ${?#0}$ '
exec /usr/bin/ksh

Speichern Sie dies unter ~/bin/screenshellund führen Sie es aus chmod +x ~/bin/screenshell. Jetzt können Sie es ausführen screenund haben separate Verlaufsdateien für jedes Fenster.

SHELL=~/bin/screenshell screen

Beispiele:

Fenster 3

    vagrant@/home/vagrant [3] 127$ history
    1       history
    2       error
    3       history

Fenster 4

    vagrant@/home/vagrant [4] $ history
    1       history
    vagrant@/home/vagrant [4] $ echo $HISTFILE
    /home/vagrant/.hist/history.4
    vagrant@/home/vagrant [4] $ tty
    /dev/pts/4

Eine Alternative wäre die Ausführung exec kshvon .kshrc, aber dazu benötigen Sie eine Art Test, um eine Exec-Schleife zu verhindern.

verwandte Informationen