Wie kann ich Terminalsitzungen auf Lion mit iterm2 und tcshrc fortsetzen

Mein Verständnis ist, dass meine Terminalfenster mit Lion ihren Zustand wiederherstellen sollten. Allerdings passiert dies bei mir nicht. Ich frage mich, ob das daran liegt, dass ich tcsh anstelle von bash verwende?

Kann ich etwas tun, damit meine iterm2-Sitzungen dort fortgesetzt werden, wo sie aufgehört haben?

Mein aktueller Versuch, dies zu tun, war zu verwenden

 alias precmd 'if ( $?TERM_PROGRAM && ${TERM_PROGRAM} == "iTerm.app" ) /opt/local/libexec/gnubin/echo -ne "\033];$cwd\007"'
 set prompt = '%{\e]2;%~\a%}%S[%m:%c3] %n%#%s '

Dies setzt jedoch nur die Beschriftungen der Registerkarten. Die Bezeichnung des Fensters erhält die abgekürzten Dateinamen mit ~ anstelle des vollständigen Dateinamens. Ich weiß nicht, ob dies damit zusammenhängt, dass ich die Wiederaufnahme des Terminals nicht erhalten habe. Auf jeden Fall, wenn ich beende und neu starte, sind alle meine Terminalfenster und Registerkarten wieder in meinem Home-Verzeichnis.

Zusätzliche Bonuspunkte wären eine Lösung, die empfindlich auf die Verwendung von Slogin reagiert.

Ich kann auch mit dem eingebauten Apple-Terminal nicht das korrekte Wiederaufnahmeverhalten erhalten, wenn ich das obige auf ändere

if ( $?TERM_PROGRAM && ( ${TERM_PROGRAM} == "iTerm.app" || ${TERM_PROGRAM} == "Apple_Terminal") ) then
  alias precmd ' /opt/local/libexec/gnubin/echo -ne "\033];$cwd\007"'
  set prompt = '%{\e]2;%~\a%}%S[%m:%c3] %n%#%s '
endif

Ich kehre nicht in dasselbe Arbeitsverzeichnis zurück, und obwohl ich den Befehlsverlauf sehen kann, kann ich ihn nicht verwenden (ich kann zB nicht ^P verwenden, um nach oben zu gehen, und der Verlaufsbefehl gibt nichts zurück). Ich glaube also , dass das irgendwie nicht mit tcsh funktioniert, im Gegensatz zu bash. Meine Kollegen versichern mir, dass sie das Arbeitsverzeichnis beim Beenden der Anwendung nicht verlieren.

Lion speichert und zeigt den Inhalt der Scrollback-Puffer (und nur für die eingebaute Terminal-App - iTerm2 und andere unterstützen die plötzliche Beendigung und Wiederaufnahme der Anwendung). Dinge wie Arbeitsverzeichnis und Shell-Variablen werden nicht gepflegt. Möchten Sie Bildschirme als Shell verwenden, um diese Art von Inhalten zu speichern, während der Mac läuft, aber das App-Terminal geschlossen ist?
bash ist die Standard-Shell unter OS X, und nur sie ist standardmäßig so konfiguriert, dass sie mit Terminal die Wiederherstellung des Arbeitsverzeichnisses koordiniert. Sie können den Code, der dies tut, in sehen /etc/bashrc. Möglicherweise müssen Sie jemanden finden, der das für tcsh anpasst. An anderer Stelle auf Stack Exchange habe ich äquivalenten Code für zsh gepostet.
Um beliebige Zustände wie Umgebungsvariablen zu speichern und wiederherzustellen, müssen Sie Ihren Shell-Konfigurationsskripten Code hinzufügen, um ihn zu verwalten. Terminal setzt für jedes Terminal-Fenster/Tab eine Umgebungsvariable $TERM_SESSION_IDauf eine eindeutige ID; sein genauer Wert kann sich ändern, aber es ist derzeit eine UUID. Beim Wiederherstellen wird diese ID wiederhergestellt. Beispielsweise können Sie die ID verwenden, um einen Dateipfadnamen zu generieren und Daten darin zu speichern und sie dann beim Start der Shell wieder einzulesen. Wahrscheinlich möchten Sie alte Sitzungsdaten regelmäßig löschen, da Sie nicht wissen, ob eine Sitzung jemals wiederhergestellt wird.

Antworten (1)

Sie könnten dem Startskript Ihrer Standard-Shell so etwas hinzufügen (meins ist zsh, die meisten Leute verwenden bash, denke ich, also müssen Sie möglicherweise etwas anpassen.)

Hier ist mein bisschen Screen-Jiggery-Pokery (in meiner .zshrc)

# Autoload screen if we aren't in it.  (Thanks Fjord!)
if [[ $STY = '' ]] then screen -xRR; fi

Ich habe das irgendwo im Internet (ich weiß nicht mehr wo, und ich weiß nicht, wer Fjord ist, aber gut zu ihm.

Damit können Sie Ihr iTerm-Fenster schließen und es wird dort fortgesetzt, wo Sie aufgehört haben, wenn Sie es erneut öffnen. Ich empfehle dringend, auch die Bildschirm-Manpage zu lesen.

Funktioniert dies, wenn Sie mehr als ein iTerm-Fenster geöffnet haben? Wie würden mehrere Bildschirmsitzungen wieder mit mehreren iTerm-Sitzungen verbunden?