Zapisz pełny stan sesji ekranowej GNU


32

Czy można zachować „stan” okna ekranowego GNU (lub zwykłej powłoki), aby móc ponownie załadować wszystko po ponownym uruchomieniu:

  • Liczba otwartych muszli
  • Nazwa każdej powłoki
  • Bieżący katalog każdej powłoki
  • Historia każdej powłoki
  • Jeśli to możliwe, ich zmienne środowiskowe

Odpowiedzi:


19

Naprawdę nie można zapisać pełnej sesji ekranu.

Co możesz zrobić, to stworzyć odpowiedni, .screenrcktóry skonfiguruje niektóre rzeczy po ponownym uruchomieniu systemu.

Oto kilka komentarzy do wymienionych rzeczy:

  • Liczba otwartych muszli
  • Nazwa każdej powłoki
  • Bieżący katalog każdej powłoki

Używam czegoś takiego w swoim, .screenrcaby otworzyć niektóre konkretne powłoki podczas uruchamiania:

## set the default shell
shell                   zsh

# screens
screen -t 'zsh'
screen -t 'mutt' mutt
screen -t 'zsh' /home/user/bin/scriptToRun
[..]

Otrzymasz ciąg pomiędzy „” jako nazwą twojego okna, a polecenie po nazwie zostanie wykonane w domyślnej powłoce. Dołącz dowolny skrypt, na przykład zmień w określonym katalogu i otwórz niektóre dzienniki.

  • Historia każdej powłoki

Czy kiedykolwiek myślałeś o udostępnianiu historii muszli podczas swoich sesji? IMHO ułatwia to znacznie. W ZSH odbywa się to setopt SHARE_HISTORYw twoim.zshrc

  • Jeśli to możliwe, ich zmienne środowiskowe

Jeśli naprawdę tego potrzebujesz i nie chcesz żadnych kompromisów, możesz pomyśleć o skrypcie powłoki, który odczytuje bieżący stan ekranu, zapisuje liczbę powłok, zmiennych środowiskowych itp. I umieszcza te informacje w skrypcie startowym nazywany przez twojego .screenrc. Dla mnie nie byłoby to warte wysiłku, ponieważ doceniam czyste środowisko po ponownym uruchomieniu, jeśli mogę dostosować domyślne okna dla ekranu.


Dziękuję za twoje sugestie. Znalazłem sposób na udostępnienie mojej historii na bashu (nie tak proste jak w przypadku Zsh), więc mam jeden strumień poleceń, który jest utrwalany. Jeśli chodzi o .screenrc, powinienem o tym pomyśleć. Niestety wydaje się, że możesz wykonywać tylko niektóre skrypty (polecenia takie jak „cd” nie działają), ale to powinno być w porządku. Nie mam nic przeciwko zmiennym środowiskowym, jeśli mogę zainicjować powłokę za pomocą skryptu.
Barthelemy,

cd jest wbudowaną funkcją twojej powłoki, polecenie cd nie miałoby sensu poza „powłoką” :-) Ale możesz po prostu dołączyć skrypt, który zawiera cd / foo / bar po shebang. Wtedy twoja nowa powłoka przejdzie do tego katalogu.
echox

tak, rozumiem to rozróżnienie, po prostu pomyślałem, że polecenia zostały w jakiś sposób przekazane do powłoki, a następnie wykonane w powłoce. Ale nie mam problemu z pisaniem skryptów inicjalizacyjnych :-) Udostępniona historia była świetnym pomysłem, naprawdę mi się podoba.
Barthelemy,


2

Istnieje narzędzie do zamrożenia stanu procesu o nazwie kriopid . Jednak obecnie nie działa z ekranem GNU, ponieważ nie obsługuje ponownego tworzenia hierarchii podprocesów. Oświadczają, że chcą to osiągnąć w przyszłości, ale projekt nie wydaje się w tej chwili zbyt aktywny. Niemniej jednak możesz śledzić ich postępy.


0

Podobną rzecz zbudowałem na Solaris wiele lat temu. Nawet nie związane z ekranem; to było związane z sesją. „jeśli $ TTY = cokolwiek”. echox ma właściwy pomysł.

wskazówka: jeśli robisz to na wielu komputerach, pamiętaj, że każda maszyna zasługuje na swoją własną definicję tego, co należy zrobić, gdy się tam logujesz, a nie wszystkie są takie same w zależności od zamontowanego / domowego lub podobnego systemu.

HTH, -br

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.