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