An vielen Orten, je nachdem
Auf virtuellen Terminals und realen Terminals wird die TERMUmgebungsvariable von dem Programm festgelegt, mit dem die Verkettung erfolgt login, und wird bis zur interaktiven Shell vererbt, die nach der Anmeldung ausgeführt wird. Wo genau dies geschieht, hängt von System zu System und von der Art des Terminals ab.
Reale, serielle Anschlüsse können je nach dem, was sich am anderen Ende des Kabels befindet, vom Typ abweichen. Herkömmlicherweise wird das gettyProgramm mit einem Argument aufgerufen, das den Terminaltyp angibt, oder es wird das TERMProgramm von den Dienstkonfigurationsdaten eines Dienstmanagers übergeben.
Wie Sie bereits bemerkt haben, haben virtuelle Kernel-Terminals einen festen Typ. Im Gegensatz zu NetBSD, das den virtuellen Terminaltyp des Kernels im laufenden Betrieb variieren kann, verfügen Linux und die anderen BSDs über einen einzigen festen Terminaltyp, der im integrierten Terminalemulationsprogramm des Kernels implementiert ist. Unter Linux stimmt dieser Typ mit linuxder terminfo-Datenbank überein . (Die Kernel-Terminal-Emulation von FreeBSD ist xtermseit Version 9 eine eingeschränkte Untermenge.)
- Auf Systemen, die
mingettyoder vc-get-tty(aus dem nosh-Paket) verwenden, "weiß" das Programm, dass nur mit einem virtuellen Terminal gesprochen werden kann, und sie verdrahten die "bekannten" virtuellen Terminaltypen, die dem Betriebssystem entsprechen, für das das Programm kompiliert wurde.
- Auf systemd-Systemen kann man dies in der
/usr/lib/systemd/system/getty@.serviceUnit-Datei ( /lib/systemd/system/getty@.serviceauf nicht zusammengeführten Systemen) sehen, die liestUmgebung = TERM = Linux
Festlegen der TERMVariablen in der Umgebung, an die übergeben wird agetty.
Für virtuelles Kernel - Terminals, eine nicht den Terminaltyp verändern. Das Terminal-Emulator-Programm im Kernel ändert sich schließlich nicht. Es ist falsch , den Typ zu ändern. Dies wird insbesondere die Erkennung von Cursor- / Bearbeitungstasten-CSI-Sequenzen vermasseln. Die linuxCSI - Sequenzen durch den Terminal - Emulator Linux - Kernel gesendet werden , anders als die xtermoder vt100CSI - Sequenzen von GUI - Terminal - Emulator Programmen in Dezember VT - Modus gesendet.
Ihr GUI-Terminal-Emulator ist eines von vielen Programmen, von SSH bis hin zu screenPseudo-Terminals. Der Terminaltyp hängt davon ab, welches Terminalemulatorprogramm auf der Masterseite des Pseudoterminals ausgeführt wird und wie es konfiguriert ist. Die meisten GUI-Terminalemulatoren starten das Programm auf der Slave-Seite mit einer TERMVariablen, deren Wert mit ihrer Terminalemulation auf der Master-Seite übereinstimmt. Programme wie der SSH-Server versuchen, den Terminaltyp auf dem Client-Ende der Verbindung zu "passieren". Normalerweise gibt es ein Menü oder eine Konfigurationsoption, um zwischen Terminalemulationen zu wählen.
Die packende Hand
Die richtige Methode zum Erkennen der Farbfähigkeit besteht nicht darin , eine Liste der Terminaltypen in Ihrem Skript festzuklemmen. Es gibt sehr viele Terminaltypen, die Farben unterstützen.
Der richtige Weg ist, sich anzusehen, was termcap / terminfo über Ihren Terminaltyp aussagt.
Farbe = 0
if tput Co> / dev / null 2> & 1
dann
test "` tput Co` "-gt 2 && color = 1
elif tput colors> / dev / null 2> & 1
dann
test "` tput colors` "-gt 2 && color = 1
fi
Weitere Lektüre
- Jonathan de Boyne Pollard (2018).
TERM. nosh Führer . Software.