„Ekran” odnosi się do programu wymienionego w Jak ponownie połączyć się z rozłączoną sesją ssh . To dobry obiekt.
Ale jest pytanie, które naprawdę chciałbym wiedzieć. Skąd mam wiedzieć, czy działam na „ekranie”? Różnica polega na:
- Jeśli tak, wiem, że mogę bezpiecznie zamknąć bieżące okno terminala, np. Zamknąć okno PuTTY, bez utraty sesji powłoki (Bash itp.).
- Jeśli nie, wiem, że muszę zamknąć wszystkie prace przed zamknięciem okna terminala.
Lepiej, że chcę, aby ten status był wyświetlany w monicie PS1, dzięki czemu będę mógł go zobaczyć automatycznie.
linux
gnu-screen
Jimm Chen
źródło
źródło
Odpowiedzi:
(Skradzione z „ Jak mogę stwierdzić, czy jestem na ekranie? ” Na StackOverflow i autorstwa użytkownika jho . PS Nie możesz głosować na duplikat w witrynach StackExchange.)
Sprawdzić
$STY
. Jeśli jest zerowy, jesteś na „prawdziwym” terminalu. Jeśli coś zawiera, to nazwa ekranu, na którym się znajdujesz.Jeśli nie jesteś na ekranie:
Jeśli jesteś na ekranie:
Jeśli używasz tmux zamiast screena, sprawdź także
$TMUX
. Aby dodać to do pytania, dodaj następujące elementy do~/.bashrc
:źródło
sudo
to domyślnie nie odziedziczy zmiennych środowiskowych, w tym$STY
. Ale jest zwykle propagowane w środowisku sudo, więc może sprawdzić, czy lub$TERM
$STY
$TERM=="screen"
Poszukaj,
$STY
który zawiera szczegóły, którescreen
służą do komunikowania się ze sobą;$WINDOW
będzie wówczas bieżącymscreen
numerem okna.źródło
Prostym czekiem, którego zwykle używam, jest po prostu uderzenie Ctrl- a:
Jeśli kursor przeskoczy na początek linii , nie jestem w sesji ekranowej.
Jeśli nic się nie stanie , wiem, że jestem w sesji ekranowej i że właśnie użyłem klawisza sterowania ekranem. Następnie uderzam a(przeskakuję na początek wiersza), w(pokazuję bieżące okna ekranu) lub wykonuję inne „nieszkodliwe” polecenie ekranowe, aby wrócić do wiersza poleceń.
(Oczywiście działa to tylko wtedy, gdy aktualnie wykonujesz bash lub inne oprogramowanie, które „przeskakuje na początek linii” lub robi coś równoważnie nieszkodliwego po naciśnięciu Ctrl-a.)
źródło
Cóż, przez większość czasu (nieobecne czyjeś próby pieprzenia się z rzeczami)
TERM
będziesz ustawiony nascreen
(lub przynajmniejscreen
gdzieś wspomnieć ).Łatwym rozwiązaniem problemu jest po prostu uruchamianie ekranu wszędzie. Nie wychodź z domu bez tego, mówię.
źródło
$TERM
również zwykle się rozprzestrzeniasudo
, co jest plusem!Trzymam to w moim
.bashrc
:Nie jest to niezawodne, ale za każdym razem, gdy tworzę nowy ekran, wyświetla numer okna w monicie. Jeśli nie biegnę
screen
, nie ma numeru.źródło
Mam jeszcze fajniejszy sposób.
Dodaj następujące elementy do ~ / .screenrc, a zobaczysz linię stanu na dole (pokazującą w odwróconym tekście datę, godzinę i obciążenie systemu. Więcej kodów ucieczki znajduje się w linku strony podręcznika poniżej.
Źródło tego podczas sesji ekranowej z
ctrl-a:source ~/.screenrc
.Muszę za to podziękować Kyleowi Rankinowi z Linux Journal. Zobacz jego fantastyczny artykuł na http://www.linuxjournal.com/article/10950 . Część strony podręcznika, do której się odwołuje, można znaleźć pod adresem http://www.gnu.org/software/screen/manual/screen.html#String-Escapes .
źródło
możesz również ponownie przeszukać drzewo procesów,
$$
aby sprawdzić, czy znajdziesz instancję ekranu. dokładny łańcuch prawdopodobnie zależeć będzie od konfiguracji - w moim systemie OS Xzsh
ekran wewnętrzny malogin
jako rodzic,SCREEN
dziadek iscreen
pradziadek.źródło