Как определить, находится ли я в полноэкранной оболочке bash или в окне терминала с графическим интерфейсом?

У меня есть некоторый код в .bashrc, который устанавливает заголовок окна терминала, используя текущую команду, и он прекрасно работает в Unity, где терминал находится в окне. Однако, когда я вхожу в систему с помощью терминала Ctrl + Alt + F1 (как бы он ни назывался), мое приглашение заполняется мусором, который это различные escape-последовательности, которые устанавливают (несуществующий) заголовок окна.

Как я могу определить из скрипта bash, нахожусь ли я в одном или другом?

4
задан 24 September 2013 в 01:01

3 ответа

Если вы находитесь в окне терминала с графическим интерфейсом, вы не находитесь в оболочке входа в систему. И если вы находитесь в tty, вы уверены, что в оболочке входа в систему. Чтобы проверить их, вы можете использовать:

shopt -q login_shell && echo 'Login shell' || echo 'Not login shell'

или, проще:

shopt | grep login

Пример для использования в выражении if:

login_shell=$(shopt | grep login | cut -f2)
if [ "$login_shell" = "on" ]; then 
    echo 'Login shell'
    # do stuff in login shell
else
    echo 'Not login shell'
    # do stuff in non login shell
fi
0
ответ дан 24 September 2013 в 01:01

Не может быть намного проще, чем это:

echo "$TERM"

, если он возвращает «xterm», вы находитесь в терминальном окне
, если он возвращает «linux», вы находитесь в виртуальном (Ctrl-Alt-F1) терминал

0
ответ дан 24 September 2013 в 01:01

В окне терминала в сеансе X11 обычно устанавливается переменная окружения DISPLAY (за исключением некоторых случаев, когда используется su); это обычно не будет иметь место в консоли.

0
ответ дан 24 September 2013 в 01:01

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

Похожие вопросы: