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

Вопрос или проблема

Мне нужно это, чтобы определить, отключит ли меня нажатие ctrl+d от сервера или просто закроет текущий screen.

Можно ли как-то проверить, нахожусь ли я сейчас в сессии screen?

Вы можете посмотреть переменную $STY (переменную, установленную командой screen). Если она не равна “”, значит, вы находитесь в сессии screen.

Я в screen

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

Я не в screen

$ echo $STY

$

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

echo $TERM

Если это сессия screen, переменная term должна вернуть “screen”.

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d (чтобы выйти из screen)

root@deore:/volumes# echo $TERM
xterm

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

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

Команда caption в ~/.screenrc – хороший способ дифференцировать сессию screen.

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

$ cat ~/.screenrc
caption always "%{= kc}Сессия экрана на %H (нагрузка системы: %l)%-28=%{= .m}%D %d.%m.%Y %0c"

Это добавляет строку подобного вида в нижнюю часть экрана:

Сессия экрана на gbook (нагрузка системы: 1,75 1,74 1,68)                   Пн 05.01.2015 13:01

С первой частью (имя системы + нагрузка) зелёным цветом и датой розовым. Полезно и сложно пропустить!

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

Лучший ответ (на мой взгляд), вдохновленный этим, просто введите следующее:

pstree -s $$

Если вы получите что-то такое:

systemd───sshd───sshd───bash───screen───screen───bash───pstree

… тогда вы в screen.

Это верно не только для screen, но и для любого типа процесса (например, script, вложенный bash или другие оболочки), открывающего вложенную оболочку, и это также может показать вложенные вызовы screen (если есть несколько не последовательных вхождений).

Если вы смотрите на командную строку, вы можете просто ввести что-то, что угодно, и нажать Ctrl+A. Если ваш курсор перемещается в начало команды, вы не находитесь в screen. Если вам нужно дополнительно нажать A, значит, вы находитесь внутри.

Выполните screen -ls. Это явно укажет статус Attached или Detached.

Пример attached:

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

Пример detached:

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

screen -ls

для просмотра ваших сессий и

screen -r sessioninfo

для переподключения к отключенной, если она отсоединена.

screen -D -r sessioninfo

для переподключения к отключенной.

Ответ или решение

Чтобы определить, находитесь ли вы в сессии screen, можно воспользоваться несколькими методами. Эти способы помогут вам понять, не приведет ли нажатие сочетания клавиш Ctrl+D к разрыву соединения с сервером или просто закроет текущую сессию screen. Рассмотрим наиболее распространенные методы.

1. Проверка переменной окружения $STY

Переменная $STY устанавливается при запуске сессии screen. Чтобы проверить, находитесь ли вы в сессии, выполните следующую команду в терминале:

echo $STY

Если результат не пустой, это значит, что вы действительно находитесь в сессии screen. Если вы видите пустую строку, то сессия отсутствует.

Пример:

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

В данном случае вы находитесь в screen.

2. Проверка переменной окружения $TERM

Еще один способ — проверить значение переменной $TERM. Выполните команду:

echo $TERM

Если вы находитесь в сессии screen, эта переменная вернет значение screen. Если сессия не активна, вернется другое значение, например xterm.

Пример:

$ echo $TERM
screen

Или в случае, если сессии нет:

$ echo $TERM
xterm

3. Использование сочетания клавиш в screen

Если вы находитесь в командной строке и хотите быстро проверить, активна ли screen, попробуйте комбинацию клавиш Ctrl+A следом за Ctrl+T. Если на экране появится информация о времени, значит, вы в screen.

4. Проверка с помощью команды pstree

Команда pstree может показать иерархию процессов. Выполните следующую команду:

pstree -s $$

Если вывод покажет, что ваш текущий процесс bash запущен внутри screen, вы находитесь в сессии.

5. Проверка активных сессий с помощью screen -ls

Команда screen -ls позволит вам увидеть все активные сессии screen. Выполните команду:

screen -ls

Это отобразит все ваши сессии, включая статусы Attached и Detached, что даст ясное представление о текущем состоянии сессий.

Пример:

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

Это значит, что вы прикреплены к сессии, и нажатие Ctrl+D разорвет соединение.

6. Модификация конфигурации ~/.screenrc

Можно настроить файл конфигурации ~/.screenrc, чтобы он отображал информацию о вашей сессии внизу экрана. Например, добавив следующие строки:

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

Это добавит постоянную строку с данными о сессии, что поможет вам легко идентифицировать сессию screen.

Заключение

Используя эти методы, вы сможете точно определить, находитесь ли вы в сессии screen, прежде чем выполнять действия, которые могут привести к разрыву соединения. Это знание поможет вам избежать нежелательных отключений и сохранить ваше рабочее время.

Оцените материал
Добавить комментарий

Капча загружается...