Как я узнаю, что я работаю внутри 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 как его прадедушка

Другие вопросы по тегам