Для чего $TERM
?
$TERM
Переменная предназначена для использования в приложениях , чтобы воспользоваться возможностями этого терминала.
Например, если программа хочет отображать цветной текст, она должна сначала выяснить, поддерживает ли используемый вами терминал цветной текст, а затем, если это так, как сделать цветной текст.
Это работает так, что система хранит библиотеку известных терминалов и их возможностей. На большинстве систем он есть /usr/share/terminfo
(есть также termcap, но он больше не используется).
Допустим, у вас есть программа, которая хочет отображать красный текст. По сути, он вызывает библиотеку terminfo, которая говорит: « дайте мне последовательность байтов, которую я должен отправить для красного текста для терминала xterm ». Затем он просто берет эти байты и печатает их.
Вы можете попробовать это самостоятельно tput setf 4; echo hi
. Это получит setf
возможность terminfo и передаст ему параметр 4
, какого цвета вы хотите.
Почему гном терминал лжет о себе
Теперь предположим, что у вас есть новый блестящий эмулятор терминала, который был только что выпущен, а системная библиотека terminfo пока не имеет его определения. Когда ваше приложение отправляется посмотреть, как что-то сделать, оно не будет работать, потому что терминал не известен.
Ваш терминал обходит это, лгая о том, кто он. Итак, ваш терминал гномов говорит " Я xterm ".
Xterm - это очень простой терминал, который существует с начала X11, и поэтому большинство эмуляторов терминала поддерживают то, что он поддерживает. Таким образом, благодаря терминалу gnome, который говорит, что это xterm, более вероятно, что у него есть определение в библиотеке terminfo.
Недостатком лжи о вашем типе терминала является то, что терминал может фактически поддерживать гораздо больше, чем xterm (например, многие новые терминалы поддерживают 256 цветов, в то время как старые терминалы поддерживают только 16). Таким образом, у вас есть компромисс, получите больше возможностей или больше совместимости. Большинство терминалов выберут для большей совместимости, и, следовательно, решили рекламировать себя как xterm
.
Если вы хотите переопределить это, многие терминалы предложат какой-либо способ настройки поведения. Но вы также можете просто сделать export TERM=gnome-terminal
.
$TERM
набора кxterm
по уважительной причинеTERM
Переменная среды указывает терминала типа , а не терминал приложения .TERM
имеет конкретную цель: он сообщает приложениям, работающим в этом терминале, как взаимодействовать с терминалом.Приложения взаимодействуют с терминалами путем написания escape-последовательностей - последовательностей символов, которые включают непечатаемые символы и имеют такие эффекты, как перемещение курсора, стирание части экрана, изменение текущего цвета и т. Д. В старые времена физические терминалы разных марок имели разные наборы escape-последовательностей. Поэтому операционная система поддерживает базу данных типов терминалов и их характеристик. Традиционная база данных - termcap («ТЕРМИНАЛЬНЫЕ ВОЗМОЖНОСТИ»); многие современные системы и приложения перешли на terminfo . Обе базы данных индексируются по имени типа терминала, и приложения запрашивают их, используя имя типа терминала из
TERM
переменных среды.В настоящее время большинство терминалов используют стандартный набор escape-последовательностей с несколькими общими наборами расширений, поэтому вы не увидите много разных значений
TERM
. Большинство эмуляторов GUI-терминала совместимы с xterm , традиционным X-терминалом (который до сих пор используется и поддерживается).Эмуляторы терминалов, которые отличаются от xterm, могут добавлять свои собственные записи в базу данных терминалов под своим именем. Однако это плохо сочетается с удаленными оболочками. Программа, работающая на машине A, но отображающаяся на машине B, например, потому что она была запущена через ssh из B в A, должна запросить базу данных терминала на машине A. Методы удаленного входа, такие как ssh, переносят
TERM
переменную среды, но это полезно только тогда, когда в базе данных терминалов B также есть запись для значения пользователя на A. Поэтому многие эмуляторы терминалов придерживаются того,TERM=xterm
что довольно широко известно.Различие между терминалами по большому счету не в том, как приложения взаимодействуют с ними, а в том, как терминалы взаимодействуют с пользователем и соответствуют его среде. Например, Gnome Terminal хорошо выглядит на Gnome и предоставляет вкладки и другие тонкости; Konsole хорошо выглядит на KDE и предоставляет вкладки и другие тонкости; urxvt имеет небольшое требование к памяти; Console2 работает в Windows; screen и tmux предоставляют сеансы, которые могут быть подключены к разным родительским терминалам; и так далее. Поскольку ни одна из этих функций не имеет значения для приложений, работающих в терминале, большинство эмуляторов терминала используют
TERM=xterm
.Чтобы узнать, на каком терминале работает оболочка, посмотрите на родительский элемент оболочки:
источник
ps -p$PPID
кажется, не говорит мне, на каком терминале я работаю. Или, по крайней мере, не так, как я понимаю. У вас есть пример вывода / ответа?Переменная окружения TERM не означает используемый вами терминал.
Цитирую gnu.org :
источник