Як я можу знати, що я працюю всередині "екрану" Linux чи ні?


60

"Екран" посилається на програму, згадану в розділі Як підключитися до відключеного сеансу ssh . Це хороший інструмент.

Але є питання, яке я дуже хотів би знати. Як дізнатися, чи біжу я всередині "екрана"? Різниця полягає в:

  • Якщо так, я знаю, що можу безпечно закрити поточне вікно терміналу, наприклад, закрити вікно PuTTY, не втрачаючи сеансу оболонки (Bash тощо).
  • Якщо ні, я знаю, що я повинен подбати про будь-які очікувані роботи, перш ніж закрити вікно терміналу.

Краще, я хотів би, щоб цей статус відображався в підказці PS1, щоб я міг його автоматично бачити будь-який час.


3
Якщо ви використовуєте tmux замість екрана, ви отримаєте невелику панель стану за замовчуванням. Вони майже однакові для базового використання.
Семюель Едвін Уорд

9
Покладіть свій тотем на стіл і нехай він крутиться. Якщо вона продовжує крутитися, ви все в порядку. Ще ви на екрані:]
Конерак

Ви також можете використовувати byobu з екраном і tmux. Це може бути налаштовано для автоматичного завантаження при вході в систему, а потім натискання клавіші F6 відключається і виходить з системи.
mp3foley

Відповіді:


88

(Викрадено з " Як я можу дізнатися, чи перебуваю я на екрані? " Над StackOverflow та автор користувача jho . PS Ви не можете голосувати за дублікат на сайтах StackExchange.)

Перевірка $STY. Якщо це недійсно, ви перебуваєте на "справжньому" терміналі. Якщо він містить щось, це назва екрана, на якому ви знаходитесь.

Якщо ви не на екрані:

eric@dev ~ $ echo $STY
eric@dev ~ $ 

Якщо ви перебуваєте на екрані:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71

Якщо ви використовуєте tmux замість екрана, також поставте прапорець $TMUX. Щоб додати це у своє запит, додайте до свого ~/.bashrc:

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi

2
якщо запустити щось через sudoнього за замовчуванням, не буде успадковано змінні середовища, в тому числі $STY. Але, як правило, розповсюджується на середовище $TERM $STY $TERM=="screen"
судо

14

Подивіться, $STYщо містить деталі, які screenвикористовують для спілкування з самим собою; $WINDOWтоді буде поточний screenномер вікна.


13

Проста перевірка, яку я зазвичай використовую, - це просто натиснути Ctrl- a:

  • Якщо курсор стрибне до початку рядка , я не перебуваю в сеансі екрану.

  • Якщо нічого не трапляється , я знаю, що перебуваю всередині екранного сеансу і що я тільки що використовував клавішу управління екраном. Потім я натискаю a(перехід до початку рядка), w(показую поточні вікна екрана) або виконую якусь іншу "нешкідливу" команду екрана, щоб повернутися до командного рядка.

(Звичайно, це працює лише в тому випадку, якщо ви зараз виконуєте bash чи інший фрагмент програмного забезпечення, яке "переходить на початок рядка" або робить щось рівнозначне нешкідливе при натисканні на Ctrl-a.)


3
Це працює лише в тому випадку, якщо клавіша управління екраном залишається, звичайно, Ctrl-a за замовчуванням.
ShreevatsaR

1
натискання клавіші управління + DD від'єднає та припинить ssh. Ви можете скористатися цією комбінацією для більшої зручності
akostadinov

Незважаючи на те, що відповідь на справжнє запитання є чудовою, цей метод не піддається скрипту.
Nikodemus RIP

7

Ну, більшу частину часу (відсутні чиїсь спроби накрутити речі) ваш TERMбуде налаштовано screen(або хоча б screenдесь згадати ).

Просте рішення проблеми - просто запустити екран скрізь. Не залишайте дому без цього, я кажу.


$TERMтакож зазвичай розповсюджується через sudo, що є плюсом!
rcoup

7

Я зберігаю це в своєму .bashrc:

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"

Це не дурно, але коли я створюю новий екран, він додає номер вікна у відповідь. Якщо я не бігаю screen, немає номера.


3

У мене ще крутіший спосіб.

Додайте наступне до свого ~ / .screenrc, і ви побачите рядок статусу внизу (у перевернутому тексті відображаються дата, час та завантаження системи. Більше кодів евакуації знайдено у посиланні man man на сторінці нижче.

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'

Джерело цього, коли ви знаходитесь на екрані з ctrl-a:source ~/.screenrc.

Я маю подякувати за це Кайлу Ранкіну з Linux Journal. Дивіться його фантастичну статтю за адресою http://www.linuxjournal.com/article/10950 . Розділ чоловічої сторінки, на який він посилається, можна знайти за адресою http://www.gnu.org/software/screen/manual/screen.html#String-Escapes .


2

Ви також можете повторно записувати дерево процесів, $$щоб побачити, чи знайдете екземпляр екрана. точний ланцюг, ймовірно, буде залежати від вашої установки - на моєму вікні OS X zshвнутрішній екран має loginяк свого батька, SCREENяк свого прабабуся і screenпрабабуся.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.