Как я узнаю, что я работаю внутри linux-экрана или нет?
"Экран" относится к программе, упомянутой в разделе "Как подключиться к отключенному сеансу SSH". Это хорошая возможность.
Но есть вопрос, который я действительно хотел бы знать. Как узнать, бегу ли я внутри "экрана"? Разница в том, что:
- Если да, я знаю, что могу безопасно закрыть текущее окно терминала, например, закрыть окно PuTTY, не теряя сеанс оболочки (Bash и т. Д.).
- Если нет, я знаю, что должен позаботиться о любых незавершенных работах, прежде чем закрыть окно терминала.
Еще лучше, чтобы этот статус отображался в приглашении PS1, чтобы я мог видеть его в любое время автоматически.
7 ответов
(Похищен у " Как узнать, нахожусь ли я на экране?" В 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
Ищу $STY
который предоставляет детали, которые screen
использует для общения с самим собой; $WINDOW
тогда будет текущим screen
номер окна
Простая проверка, которую я обычно использую, состоит в том, чтобы просто нажать Ctrl-a:
Если курсор переходит к началу строки, я не нахожусьвнутри экранной сессии.
Если ничего не происходит, я знаю, что я нахожусь в сеансе экрана и что я только что использовал клавишу управления экраном. Затем я нажимаю (перейти к началу строки), w (показать текущие окна экрана) или выполнить другую "безвредную" экранную команду, чтобы вернуться в командную строку.
(Конечно, это работает только в том случае, если вы в настоящее время выполняете bash или другое программное обеспечение, которое "переходит на начало строки" или делает что-то эквивалентное безвредным при нажатии Ctrl-a.)
Я держу это в моем .bashrc
:
PS1='[\u@\h \W'
if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
PS1="$PS1]$"
Это не надежно, но всякий раз, когда я создаю новый экран, он помещает номер окна в подсказку. Если я не бегу screen
нет номера
Ну, большую часть времени (без чьих-либо попыток ввернуть вещи) ваши TERM
будет установлен в screen
(или хотя бы упомянуть 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.
Вы также можете восстановить дерево процессов из $$
чтобы увидеть, если вы найдете экземпляр экрана. точная цепочка, вероятно, будет зависеть от вашей настройки - на моей коробке OS X, zsh
внутри экрана есть login
как его родитель, SCREEN
как его дедушка, и screen
как его прадедушка