Как определить, находится ли текущий сеанс терминала на экране GNU? - PullRequest
15 голосов
/ 13 августа 2010

У меня есть команда, которую я хочу выполнить в .bashrc, только когда текущий терминал Окно управляется экраном GNU. Как мне это сделать? Есть ли переменная окружения для этого? Я имел обыкновение иметь

if [ -n "$WINDOW" ]; then
    command
fi

Но из того, что я могу сказать, $WINDOW может быть или не быть определено по всему экрану управляемые сеансы.

Ответы [ 5 ]

18 голосов
/ 13 августа 2010

Проверьте переменную окружения $ STY (содержит информацию об экране) или $ TERM как «экран» (возможно, менее надежный).

5 голосов
/ 26 ноября 2011

подпись верна

См. Документ

http://www.gnu.org/software/screen/manual/html_node/Environment.html

STY

Альтернативное имя сокета. Если вызывается screen и задана переменная среды STY, то он создает только окно в текущем сеансе screen, а не начинает новый сеанс.

4 голосов
/ 13 августа 2010

отметьте $TERM, для сеанса экрана установлено значение 'screen' (но не гарантируется на 100%)

UPDATE

альтернативно, вы можете использовать тот факт, что на экране $TERMCAP содержит подстроку экрана:

[[ $TERMCAP =~ screen ]] && echo "in screen"

также не гарантируется на 100%

UPDATE2

Если ни один из подходов не работает, вы можете найти вдохновение в руководстве по экрану

2 голосов
/ 23 апреля 2017

Я хотел бы предложить альтернативное решение, которое всегда видно и не требует проверки, чтобы узнать, что вы находитесь в сеансе screen.

Просто добавьте / отредактируйте файл ~/.screenrc в папке $HOME и добавьте команду caption:

caption always "%{= kc}Screen session on %H (system load: %l)%-28=%{= .m} %Y-%m-%d %0c"

и вы получите в самом низу одну строку, которая всегда видна и окрашена.

Screen session on host (system load: 1.50 1.40 1.30)        2017-04-23 14:06

Обратите внимание:

Когда вы находитесь внутри экрана на host1 и открываете другой сеанс SSH для host2 и открываете там экран, на котором также есть .screenrc, вы получите две строки внизу, расположенные снизу вверх (как обертка).

В этом случае это ОЧЕНЬ полезно!

Screen session on host2 (system load: 0.01 0.03 0.05) 2017-04-23 14:14 Screen session on host1 (system load: 0.00 0.00 0.00) 2017-04-23 14:14


Дополнительная информация:

https://www.gnu.org/software/screen/manual/html_node/Caption.html

Command: caption always|splitonly [string]

https://www.gnu.org/software/screen/manual/html_node/String-Escapes.html#String-Escapes


Я нашел этот хит здесь на SO.

1 голос
/ 13 августа 2010

Проверьте переменную $ TERM

...