Как я могу отличить окно терминала (GUI) от консоли (CTRL+ALT+F3)?

Я использую цветную подсказку удара как так:

blue=$(tput setaf 4)
reset=$(tput sgr0)
bold=$(tput bold)
export PS1='($?) \[$bold$blue\]\u@\h:\w\[$reset\]$(__git_ps1)> '

Я обычно работаю в окне терминала (терминал гнома), но иногда в полноэкранной консоли (CTRL+ALT+F3).

Моя цветная подсказка прекрасна в терминале GUI, но трудно читать в полном экране, потому что цвета выглядят по-другому. Таким образом, я хотел бы использовать другой цвет (например. cyan=$(tput setaf 6)), когда в консоли. Чтобы это работало, я должен выяснить, какой режим я в настоящее время нахожусь в и набор мой $PS1 соответственно.

Я попробовал tty команда. Это дает

/dev/pts/0  # GUI terminal
/dev/tty3   # console 

Я также пытался исследовать значение $TERM. Это дает

xterm-256color  # GUI terminal
linux           # console

Они оба работали бы на меня, но мой вопрос: это - корректный способ надежно отличить консоль по сравнению с терминалом или является там лучшими путями? Я нахожусь на 17.10.1, если это имеет значение.

3
задан 17 February 2018 в 18:57

1 ответ

Существует много способов решить что, три известных существа:

  • tty - распечатайте имя файла терминала, подключенного к стандартному входу:

    /dev/pts/10
    /dev/tty1
    

    Эта функция, записанная Sergiy Kolodyazhnyy, использует tty.

  • ps hotty $$ (короткий для ps --no-header --format tty --pid $$):

    pts/10
    tty1
    
  • who who whom | awk '{ print $2 }' (на самом деле это who с двумя произвольными аргументами равняйтесь who -m – который также соответствует игре слов):

    pts/10
    tty1
    

Я подозреваю значения TERM отличаться между дистрибутивами и даже выпускает, но tty стабильный и надежный путь. Я использовал бы его как так:

if tty|grep -q tty; then
  echo "That's a TTY."
else
  echo "That's not a TTY."
fi

Кажется, существует проблема с, по крайней мере, who в gnome-terminal, к счастью существует сценарий обертки для работы вокруг этой проблемы.

Полезные ссылки:

6
ответ дан 1 December 2019 в 15:22

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

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