Вопрос или проблема
Мне нужно это, чтобы определить, отключит ли меня нажатие 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
, прежде чем выполнять действия, которые могут привести к разрыву соединения. Это знание поможет вам избежать нежелательных отключений и сохранить ваше рабочее время.