Я использую цветную подсказку 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 если это имеет значение.
Существует несколько способов определить, что три известных существа:
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
Существует несколько способов определить, что три известных существа:
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