«Экран» относится к программе, упомянутой в Как повторно подключиться к отключенному сеансу 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
как его прадедушка.