Come verificare se sono in sessione schermo?


75

è in qualche modo possibile verificare se sono ora in sessione schermo? Ne ho bisogno per determinare se premere Ctrl + D mi disconnetterebbe dal server o chiuderebbe semplicemente la schermata corrente. Grazie.

Risposte:


107

Puoi guardare la $STYvariabile (una variabile impostata dal comando schermo ). Se non è "", allora ci si trova in una sessione schermo.

Sono sullo schermo

$ echo $STY 
29624.pts-1.iain-10-04
$

Non sono sullo schermo

$ echo $STY

$

12
Ciò presume che ci si trovi ancora all'interno di una sessione in esecuzione sul computer locale. Se avvii lo schermo e poi SSH da qualche altra parte, questo non funzionerà.
David Mackintosh,

2
if test -n "$STY"; then printf "This is a screen session named '$STY'.\n"; else printf "This is NOT a screen session.\n"; fi
aggregate1166877,

2
@DavidMackintosh se sei SSH in qualche altro posto, premendo ctrl-D "mi disconnetterai dal server", che è esattamente quello che la domanda pone.
womble

1
@ aggregate1166877 Ho questo se hai pubblicato come alias in ogni singola macchina che uso ora.
Eduardo Bezerra,

44

Puoi guardare la variabile $ TERM.

echo $TERM

Se è una screensessione, il termine variabile dovrebbe restituire "schermo".

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d (per uscire dalla schermata)

root@deore:/volumes# echo $TERM
xterm

Controlla anche: https://stackoverflow.com/questions/3472287/how-do-you-tell-if-the-current-terminal-session-is-in-gnu-screen


4
Ciò presuppone che non si stia deliberatamente rovinando il valore TERM per qualche motivo.
David Mackintosh,

1
Se stai modificando la tua variabile TERM mentre sei all'interno dello schermo, stai invitando ogni tipo di problema su te stesso.
womble

Bene, i miei nodi Solaris 2.6 non funzionano bene con i valori TERM impostati sui valori dello schermo.
David Mackintosh,

3
"$TERM" = "screen"sembra essere preservato quando si accede sudoall'ambiente, a differenza $STYdell'opzione.
Melebio

29

A meno che non siano state modificate le combinazioni di tasti predefinite, è possibile eseguire Ctrl+ a-> Ctrl+ t, che mostrerà l'ora, se ci si trova nella schermata. Funzionerà anche se hai ssh: d altrove, diversamente dagli altri suggerimenti.


4
Perché non stiamo votando questo.
AndreKR,

Questa è sicuramente la migliore soluzione qui.
Felix Jen,

2
@womble Se ti trovi in ​​un programma sconosciuto che potrebbe fare cose distruttive casuali come risposta a sequenze e comandi chiave, allora nulla è sicuro.
Gurgeh,

2
@AndreKR: non funziona in una sceneggiatura
Frank Meulenaar il

1
non sto votando perché in uno schermo e lo screening in un altro schermo, e ho letteralmente bisogno di vedere se $ STY è anche impostato. che per qualche motivo sta tornando vuoto.
Brian Thomas,

14

Il captioncomando in ~/.screenrcè un buon modo per differenziare una sessione dello schermo.

Lo sto usando personalmente:

$ cat ~/.screenrc
caption always "%{= kc}Screen session on %H (system load: %l)%-28=%{= .m}%D %d.%m.%Y %0c"

Aggiunge una linea come questa nella parte inferiore dello schermo:

Screen session on gbook (system load: 1,75 1,74 1,68)                   Lun 05.01.2015 13:01

Con la prima parte (nome del sistema + caricamento) in verde e la data in rosa. Utile e difficile da perdere!


Questo è perfetto! Non interferisce (posizione in basso), è sempre visibile (e colorato) e fornisce informazioni utili sul sistema. Ho postato questo qui anche stackoverflow.com/a/43571028/2450431
hrvoj3e

6

Ho trovato un'altra soluzione:
modifica la tua .screenrc, quindi la mia sessione dello schermo sembra completamente diversa dal normale terminale.


Penso di sapere cosa stai suggerendo e in alcune situazioni potrebbe evitare del tutto questo problema. Potrebbe essere più utile se descrivi cosa intendi mostrando (ad esempio) un .screenrcfile di esempio .
jvriesem

0
screen -ls

per visualizzare le sessioni e

screen -r sessioninfo

riconnettersi a uno disconnesso, se disconnesso.

screen -D -r sessioninfo

per riconnettersi a uno disconnesso.


1
Questo non risponde alla domanda.
womble

-1

Fare un screen -ls. Indica esplicitamente Attachedcontro lo Detachedstato.

Esempio allegato:

$ screen -ls | grep tached
3132.pts-0.esavo00      (Attached)

Esempio distaccato:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)

6
se ci sono schermi collegati da qualche altra parte, questo potrebbe essere un problema.
Dennis Nolte,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.