Назад | Перейти на главную страницу

Как мне узнать, что я работаю на «экране» Linux или нет?

«Экран» относится к программе, упомянутой в Как повторно подключиться к отключенному сеансу ssh . Это хороший объект.

Но есть вопрос, который мне очень хотелось бы знать. Как узнать, бегаю ли я внутри «экрана»? Разница в следующем:

Лучше, я бы хотел, чтобы этот статус отображался в подсказке PS1, чтобы я мог видеть его в любое время автоматически.

(Украдено из "Как узнать, нахожусь ли я на экране?"на StackOverflow и автором пользователя jho. P.S. Вы не можете голосовать за дубликат на сайтах 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

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

Я обычно использую простую проверку: просто нажимаю Ctrl-а:

  • Если курсор переходит в начало строки, Я не внутри сеанс экрана.

  • Если Ничего не произошло, Я знаю это Я внутри сеанс экрана и что я только что использовал клавишу управления экраном. Я тогда ударил а (перейти в начало строки), ш (показать текущие окна экрана) или выполнить другую «безобидную» экранную команду, чтобы вернуться в командную строку.

(Конечно, это работает только в том случае, если вы в настоящее время выполняете bash или какое-либо другое программное обеспечение, которое «перескакивает в начало строки» или делает что-то эквивалентно безвредное при нажатии Ctrl-a.)

Хорошо, большинство времени (при отсутствии чьих-либо попыток что-то напортачить) ваша TERM будет установлен на screen (или хотя бы упомянуть screen где-то).

Простое решение проблемы - просто запустить экран везде. - Не выходи из дома без него, - говорю я.

Я храню это в своем .bashrc:

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

Это не надежно, но всякий раз, когда я создаю новый экран, он помещает номер окна в подсказку. Если я не бегу 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.

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