Как проверить, нахожусь ли я в сеансе экрана?

75

Можно ли как-то проверить, сейчас я в сеансе экрана? Мне нужно, чтобы определить, будет ли нажатие Ctrl + D отключить меня от сервера или просто закрыть текущий экран. Благодарю.

WLK
источник

Ответы:

107

Вы можете посмотреть на $STYпеременную (переменная, установленная экранной командой ). Если это не "", то вы находитесь в сеансе экрана.

Я на экране

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

Я не на экране

$ echo $STY

$
Iain
источник
12
Это предполагает, что вы все еще находитесь в рабочем сеансе на локальном компьютере. Если вы запускаете экран, а затем SSH где-то еще, это не будет работать.
Дэвид Макинтош
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, если вы используете SSH где-то еще, нажатие ctrl-D «отключит меня от сервера», о чем и спрашивает вопрос.
womble
1
@ aggregate1166877 У меня есть это, если вы разместили псевдоним на каждой машине, которую я сейчас использую.
Эдуардо Безерра
44

Вы можете посмотреть на переменную $ TERM.

echo $TERM

Если это screenсеанс, термин «переменная» должен возвращать «экран».

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d (для выхода из экрана)

root@deore:/volumes# echo $TERM
xterm

Также проверьте: https://stackoverflow.com/questions/3472287/how-do-you-tell-if-the-current-terminal-session-is-in-gnu-screen

ewwhite
источник
4
Это предполагает, что вы по какой-то причине не намеренно возитесь со своим значением TERM.
Дэвид Макинтош
1
Если вы изменяете переменную TERM, находясь внутри экрана, вы навлекаете на себя всевозможные проблемы.
womble
Ну, мои узлы Solaris 2.6 не очень хорошо работают со значениями TERM, установленными на экранные значения.
Дэвид Макинтош
3
"$TERM" = "screen"кажется, сохраняется при входе в sudoсреду, в отличие от $STYопции.
Мелебиус
29

Если вы не изменили привязки клавиш по умолчанию, вы можете сделать Ctrl+ a-> Ctrl+ t, который покажет время, если вы находитесь на экране. Это будет работать, даже если у вас есть ssh: d где-то еще, в отличие от других предложений.

Gurgeh
источник
4
Почему мы не против этого.
AndreKR
Это, безусловно, лучшее решение здесь.
Феликс Джен
2
@womble Если вы находитесь в неизвестной программе, которая может выполнять случайные разрушительные действия в ответ на последовательности клавиш и команды, тогда ничто не является безопасным.
Гург
2
@AndreKR: это не работает в сценарии
Фрэнк Мейленаар
1
Я не голосую, потому что на экране, а на другом экране, и мне буквально нужно посмотреть, установлен ли $ STY. который по некоторым причинам возвращается пустым.
Брайан Томас
14

Команда captionв ~/.screenrcявляется хорошим способом дифференцировать сеанс экрана.

Я лично использую это:

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

Это добавляет строку, как эта внизу экрана:

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

Первая часть (имя системы + загрузка) - зеленым, а дата - розовым. Полезно и трудно пропустить!

Гаэтан Леманн
источник
Это потрясающе! Он не мешает (нижняя позиция), он всегда виден (и окрашен) и предоставляет полезную информацию о системе. Я разместил это здесь также stackoverflow.com/a/43571028/2450431
hrvoj3e
6

Я нашел другое решение:
измените ваш .screenrc, так что мой сеанс экрана выглядит совершенно иначе, чем обычный терминал.

WLK
источник
Я думаю, что знаю, что вы предлагаете, и в некоторых ситуациях это могло бы полностью избежать этой проблемы. Может быть более полезным, если вы опишите, что вы имеете в виду, показав (например) .screenrcфайл примера .
jvriesem
0
screen -ls

просматривать ваши сеансы и

screen -r sessioninfo

восстановить соединение с отключенным, если оно отключено.

screen -D -r sessioninfo

восстановить соединение с отключенным.

Kevin
источник
1
Это не отвечает на вопрос.
womble
-1

Сделать а screen -ls. Это собирается явно указать Attachedпротив Detachedстатуса.

Пример прилагается:

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

Пример отделен:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)
Маркус Юний Брут
источник
6
если есть экраны, прикрепленные где-то еще, это может быть проблемой.
Деннис Нольте