Есть ли способ (не паттинг gnome-terminal) для интерактивной оболочки знать окно терминала? [dубликат]

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

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

Обычно я работаю в терминальном окне (gnome-terminal), но иногда в полноэкранной консоли (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 если это имеет значение.

2
задан 17 February 2018 в 19:57

2 ответа

Существует несколько способов определить, что три известных существа:

tty - печатать имя файла терминала, подключенного к стандартным входам: /dev/pts/10 /dev/tty1 Эта функция, написанная Сергеем Колодяжным, использование 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, к счастью, для этой проблемы существует сценарий оболочки.

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

tty - распечатать имя файла терминала, подключенного к стандартным входам: /dev/pts/10 /dev/tty1 Эта функция, написанная Сергеем Колодяжным, использует tty. Как получить tty, в котором работает bash? · Unix.SE ps hotty $$ (сокращение от ps --no-header --format tty --pid $$): pts/10 tty1
5
ответ дан 17 July 2018 в 20:26

Существует несколько способов определить, что три известных существа:

tty - печатать имя файла терминала, подключенного к стандартным входам: /dev/pts/10 /dev/tty1 Эта функция, написанная Сергеем Колодяжным, использование 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, к счастью, для этой проблемы существует сценарий оболочки.

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

tty - распечатать имя файла терминала, подключенного к стандартным входам: /dev/pts/10 /dev/tty1 Эта функция, написанная Сергеем Колодяжным, использует tty. Как получить tty, в котором работает bash? · Unix.SE ps hotty $$ (сокращение от ps --no-header --format tty --pid $$): pts/10 tty1
5
ответ дан 23 July 2018 в 21:05

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

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