GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verlauf archivieren, ohne die Shell zu verlassen?

Ich habe gerade festgestellt, dass ein Workflow, den ich seit Jahren verwende, nicht das tut, was er tun soll. Da mir das so lange nicht aufgefallen ist, könnte man denken, dass es sich nicht lohnt, viel Mühe darauf zu verwenden, aber es stellt sich heraus, dass es gerade etwas wichtig geworden ist.

Wovon rede ich? Okay, ich habe tmux läuft mit mehreren Sitzungen und jede Sitzung hat unterschiedliche Fenster und so weiter. So zu arbeiten ist wunderbar. Es gibt jedoch einen Nachteil. Wenn der Server neu gestartet wird, schließt er aus irgendeinem Grund alle meine Sitzungen. Fair genug, lässt sich nicht vermeiden und kommt nicht oft vor. Das Ärgerliche daran ist jedoch, dass alle meine zsh oder bash history ist auch weg. Das ist ein Problem. Ich verlasse mich auf meine Geschichte, vielleicht viel zu sehr.

Ich habe dieses Problem umgangen, indem ich fc -W gedrückt habe (in zsh ) hin und wieder. Ich dachte, dies würde den Verlauf anhängen, der sich im Speicher befindet, und ich würde dann nur den Teil zwischen meinem letzten Aufruf von fc -W verlieren und den Neustart des Servers. Aber das tut es nicht. Wenn ich fc -W verwende in einem Fenster, dann fc -W in einem anderen würde die Historie aus dem ersten Fenster durch die Historie aus dem zweiten Fenster überschrieben werden. Ich müsste fc -R verwenden zuerst, aber das würde den gesamten Verlauf duplizieren… im Grunde habe ich den fc missbraucht Befehl die ganze Zeit.

Hier ist die Frage:Wie kann ich sicherstellen, dass nichts von meinem Verlauf verloren geht, wenn ich in tmux bin und es gibt einen plötzlichen Stromausfall? Hinweis:

  • Ich benutze unendliche Geschichte, falls das wichtig ist.
  • Ein Teil des Verlaufs zu verlieren ist in Ordnung, d. h. wenn ich einen Befehl von Hand (oder in einem Cronjob) aufrufen muss und ich den Teil des Verlaufs verliere, seit der Befehl zuletzt ausgeführt wurde, ist das in Ordnung.
  • Das Terminal verlassen und ein neues öffnen ist nicht die Lösung.
  • Ich möchte meine Befehle nicht direkt in der Historie speichern, da dies verschiedene Historien durcheinander bringt.
  • Lösungen für beide bash und zsh sind willkommen. zsh wird bevorzugt.

Bearbeiten:Heben Sie den Teil hervor, den anscheinend alle missverstehen.

Akzeptierte Antwort:

Verwenden Sie in zsh fc -AI um Ihren Verlauf zu speichern, nicht fc -W . Verwenden Sie -A , nicht -W , ansonsten wird die Historie von anderen Shell-Instanzen überschrieben. Und -I speichert nur die neuen Verlaufseinträge seit dem letzten Speichern.

Verwandte:BASH-Skript:Wie weist man jede Zeile der Befehlsausgabe Werten in einem Array zu?

Angesichts Ihres Arbeitsablaufs sollten Sie den Verlauf wahrscheinlich automatisch speichern, anstatt ihn manuell zu speichern. Schalten Sie inc_append_history ein Option, um jeden Befehl unmittelbar vor seiner Ausführung in der Verlaufsdatei zu speichern.

Während es möglich ist, den gleichen Effekt in Bash zu erzielen, ist es schwieriger, den Verlauf zwischen Bash-Instanzen richtig zu teilen. Siehe Bash-Verlauf in mehreren Terminalfenstern beibehalten


Linux
  1. Anpassen der Bash-Shell

  2. Vorrang der logischen Shell-Operatoren &&, ||?

  3. Verstümmelte Geschichte?

  4. Die Bedeutung von $? In einem Shell-Skript?

  5. Wie kann ich die Dateien in einem ZIP-Archiv auflisten, ohne es zu dekomprimieren?

Power(Shell) an die Menschen

So verwenden Sie den Linux-Verlaufsbefehl

Geschichte des Linux-Kernel-Live-Patchings

Was ist die Shell unter Linux?

Eternal Terminal – Eine Remote-Shell, die sich automatisch wieder verbindet, ohne die Sitzung zu unterbrechen

Die While-Schleife in Shell-Skripten