Як перевірити, чи перебуваю на екрані?


75

чи можна якось перевірити, чи я зараз на екрані? Мені потрібно, щоб визначити, чи натискання клавіші ctrl + d відключить мене від сервера чи просто закриє поточний екран. Дякую.

Відповіді:


107

Ви можете подивитися $STYзмінну (змінну, встановлену командою screen ). Якщо це не "", то ви перебуваєте на екрані.

Я в екрані

$ 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 "відключить мене від сервера", саме про це і задається питання.
живіт

1
@ agregate1166877 У мене це є, якщо ви розмістили псевдонім у кожній машині, яку я зараз використовую.
Едуардо Безерра

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 під час роботи на екрані, ви запрошуєте на себе всілякі проблеми.
Уомбл

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

3
"$TERM" = "screen"схоже, що зберігається при входженні в sudoнавколишнє середовище, на відміну від $STYваріанту.
Мелебій

29

Якщо ви не змінили прив'язки клавіш за замовчуванням, ви можете зробити Ctrl+ a-> Ctrl+ t, що покаже час, якщо ви знаходитесь на екрані. Це спрацює, навіть якщо у вас є ssh: d десь в іншому місці, на відміну від інших пропозицій.


4
Чому ми цього не закликаємо.
AndreKR

Тут, безумовно, найкраще рішення.
Фелікс Джен

2
@womble Якщо ви знаходитесь у невідомій програмі, яка може робити випадкові руйнівні речі як відповідь на ключові послідовності та команди, тоді нічого не є безпечним.
Gurgeh

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
Це не відповідає на запитання.
живіт

-1

Зробіть a 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.