Wofür ist das $TERM
?
Die $TERM
Variable wird von Anwendungen verwendet, um die Funktionen dieses Terminals zu nutzen.
Wenn ein Programm beispielsweise farbigen Text anzeigen möchte, muss es zuerst herausfinden, ob das von Ihnen verwendete Terminal farbigen Text unterstützt, und wenn ja, wie farbiger Text angezeigt werden soll.
Auf diese Weise verwaltet das System eine Bibliothek bekannter Terminals und ihrer Funktionen. Auf den meisten Systemen ist dies /usr/share/terminfo
der Fall (es gibt auch Termcap, aber es wird nicht mehr viel verwendet).
Nehmen wir also an, Sie haben ein Programm, das roten Text anzeigen möchte. Es ruft im Grunde genommen die terminfo-Bibliothek auf, in der steht " Gib mir die Folge von Bytes, die ich für roten Text für das xterm-Terminal senden muss ". Dann nimmt es nur diese Bytes und druckt sie aus.
Sie können dies selbst versuchen, indem Sie dies tun tput setf 4; echo hi
. Dadurch wird die setf
terminfo-Fähigkeit erhalten und es wird ein Parameter übergeben 4
, bei dem es sich um die gewünschte Farbe handelt.
Warum gnome terminal über sich selbst lügt:
Nehmen wir nun an, Sie haben einen glänzenden neuen Terminal-Emulator, der gerade veröffentlicht wurde, und die Terminfo-Bibliothek des Systems hat noch keine Definition dafür. Wenn Ihre Anwendung nachschaut, wie etwas zu tun ist, schlägt dies fehl, da das Terminal nicht bekannt ist.
Die Art und Weise, wie Ihr Terminal dies umgeht, besteht darin, zu lügen, wer es ist. Ihr Gnomenterminal sagt also " I'm xterm ".
Xterm ist ein sehr einfaches Terminal, das es seit den Anfängen von X11 gibt, und daher unterstützen die meisten Terminalemulatoren, was es unterstützt. Wenn das Gnome-Terminal sagt, es sei ein xterm, ist es wahrscheinlicher, dass es eine Definition in der terminfo-Bibliothek hat.
Der Nachteil Ihres Terminaltyps ist, dass das Terminal möglicherweise wesentlich mehr unterstützt als xterm (z. B. unterstützen viele neue Terminals 256 Farben, während ältere Terminals nur 16 unterstützen). Sie haben also einen Kompromiss, erhalten mehr Funktionen oder mehr Kompatibilität. Die meisten Terminals werden sich für mehr Kompatibilität entscheiden und sich daher dafür entscheiden, als zu werben xterm
.
Wenn Sie dies überschreiben möchten, bieten viele Terminals eine Möglichkeit, das Verhalten zu konfigurieren. Sie können es aber auch einfach tun export TERM=gnome-terminal
.
$TERM
aufxterm
einen guten GrundDie
TERM
Umgebungsvariable gibt den Terminaltyp , nicht die Terminalanwendung .TERM
hat einen bestimmten Zweck: Er teilt Anwendungen, die in diesem Terminal ausgeführt werden, mit, wie sie mit dem Terminal interagieren sollen.Anwendungen interagieren mit Terminals, indem sie Escape-Sequenzen schreiben - Sequenzen von Zeichen, die nicht druckbare Zeichen enthalten und Effekte wie das Bewegen des Cursors, das Löschen eines Teils des Bildschirms, das Ändern der aktuellen Farbe usw. aufweisen Sätze von Escape-Sequenzen. Aus diesem Grund verwaltet das Betriebssystem eine Datenbank mit Terminaltypen und ihren Merkmalen. Die traditionelle Datenbank ist termcap ("TERMinal CAPabilities"); Viele moderne Systeme und Anwendungen haben auf terminfo umgestellt . Beide Datenbanken werden nach dem Namen des Terminaltyps indiziert, und Anwendungen fragen sie unter Verwendung des Terminaltypnamens aus den
TERM
Umgebungsvariablen ab.Heutzutage verwenden die meisten Terminals einen Standardsatz von Escape-Sequenzen mit ein paar gemeinsamen Sätzen von Erweiterungen, sodass Sie nicht viele verschiedene Werte von sehen
TERM
. Die meisten GUI-Terminalemulatoren sind mit xterm kompatibel , dem traditionellen X-Terminal (das immer noch verwendet und gewartet wird).Terminalemulatoren, die sich von xterm unterscheiden, können der Terminaldatenbank unter ihrem eigenen Namen einen eigenen Eintrag hinzufügen. Dies passt jedoch nicht gut zu Remote-Shells. Ein Programm, das auf Computer A ausgeführt wird, aber auf Computer B angezeigt wird, z. B. weil es über ssh von B nach A gestartet wurde, muss die Terminaldatenbank auf Computer A abfragen. Remote-Anmeldemethoden wie ssh übertragen jedoch die
TERM
Umgebungsvariable Dies ist nur dann hilfreich, wenn die Terminaldatenbank von B auch einen Eintrag für den Wert user auf A enthält. Daher halten sich viele Terminalemulatoren anTERM=xterm
die allgemein bekannten Werte .Die Unterscheidung zwischen Terminals im Großen und Ganzen beruht nicht auf der Art und Weise, wie Anwendungen mit ihnen interagieren, sondern auf der Art und Weise, wie die Terminals mit dem Benutzer interagieren und in ihre Umgebung passen. Gnome Terminal sieht beispielsweise auf Gnome gut aus und bietet Registerkarten und andere nützliche Funktionen. Konsole sieht unter KDE gut aus und bietet Tabs und andere nützliche Funktionen. urxvt hat einen geringen Speicherbedarf. Console2 läuft unter Windows. screen und tmux bieten Sitzungen, die an verschiedene übergeordnete Terminals angeschlossen werden können. und so weiter. Da sich keine dieser Funktionen auf Anwendungen auswirkt, die im Terminal ausgeführt werden, werden die meisten Terminalemulatoren verwendet
TERM=xterm
.Um herauszufinden, auf welchem Terminal eine Shell ausgeführt wird, sehen Sie sich das übergeordnete Terminal der Shell an:
quelle
ps -p$PPID
scheint mir nicht zu sagen, welches Terminal ich laufe. Oder zumindest nicht so, wie ich es verstehe. Haben Sie eine Beispielausgabe / Antwort?Die Umgebungsvariable TERM bedeutet nicht, dass Sie ein Terminal verwenden.
Zitiert von gnu.org :
quelle