(Похищено из « Как я могу определить, нахожусь ли я на экране? » на StackOverflow, автор - пользователь jho . PS Вы не может голосовать за дубликат на сайтах StackExchange.)
Проверьте $ STY
. Если он нулевой, вы на «реальном» терминале. Если он что-то содержит, это имя экрана, в котором вы находитесь.
Если вы не на экране:
eric@dev ~ $ echo $STY
eric@dev ~ $
Если вы находитесь на экране:
eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71
Если вы используете tmux вместо screen, также проверьте $ TMUX
. Чтобы добавить это в свое приглашение, добавьте следующее в свой ~ / .bashrc
:
if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi
Простая проверка, которую я обычно использую, - это просто нажать Ctrl - a :
Если курсор переместится в начало строка , я не внутри сеанса экрана.
Если ничего не происходит , я знаю, что я внутри сеанса экрана и что я только что использовал клавишу управления экраном. Затем я нажимаю a (переход к началу строки), w (показывать текущие окна экрана) или выполняю другую «безобидную» экранную команду, чтобы вернуться в командную строку.
(Конечно, это работает только в том случае, если вы в данный момент выполняете bash или какое-либо другое программное обеспечение, которое «перескакивает в начало строки» или делает что-то эквивалентно безвредное при нажатии Ctrl-a.)
Ну, в большинстве случаев (без чьих-либо попыток что-то испортить) ваш TERM
будет установлен на screen
(или хотя бы упомянуть screen
где-нибудь).
Простое решение проблемы - просто запустить screen везде. Я говорю, не выходите из дома без него.
Найдите $ STY
, в котором содержатся сведения, которые экран
использует для связи с самим собой;
Я храню это в моем .bashrc
:
PS1='[\u@\h \W'
if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
PS1="$PS1]$"
Это не надежно, но всякий раз, когда я создаю новый экран, он помещает номер окна в приглашение.
Если я не использую экран
, там нет номера.
вы также можете повторно просмотреть дерево процессов из $$
, чтобы увидеть, найдете ли вы экземпляр экрана. точная цепочка, вероятно, будет зависеть от ваших настроек - в моем OS X внутренний экран zsh
имеет логин
в качестве своего родителя, SCREEN
в качестве своего прародителя, и экран
как его прадедушка.
У меня есть способ еще круче.
Добавьте следующее в ~ / .screenrc, и вы увидите строку состояния внизу (показывающую перевернутым текстом дату, время и загрузка системы. Дополнительные коды выхода можно найти в ссылке на страницу руководства ниже.
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[1152598 visible.