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


75

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

Ответы:


107

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

Я на экране

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

Я не на экране

$ echo $STY

$

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


4
Это предполагает, что вы по какой-то причине не намеренно возитесь со своим значением TERM.
— Дэвид Макинтош

1
Если вы изменяете переменную TERM, находясь внутри экрана, вы навлекаете на себя всевозможные проблемы.
— womble

Ну, мои узлы Solaris 2.6 не очень хорошо работают со значениями TERM, установленными на экранные значения.
— Дэвид Макинтош

3
"$TERM" = "screen"кажется, сохраняется при входе в sudoсреду, в отличие от $STYопции.
— Мелебиус

29

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


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, так что мой сеанс экрана выглядит совершенно иначе, чем обычный терминал.


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

0
screen -ls

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

screen -r sessioninfo

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

screen -D -r sessioninfo

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


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
если есть экраны, прикрепленные где-то еще, это может быть проблемой.
— Деннис Нольте
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.