Do czego służy $TERM
?
$TERM
Zmienna jest do wykorzystania przez aplikacje, aby skorzystać z możliwości tego terminala.
Na przykład, jeśli program chce wyświetlać kolorowy tekst, musi najpierw dowiedzieć się, czy terminal, którego używasz, obsługuje kolorowy tekst, a następnie, jeśli tak, jak zrobić kolorowy tekst.
Działa to tak, że system utrzymuje bibliotekę znanych terminali i ich możliwości. W większości systemów jest to dostępne /usr/share/terminfo
(istnieje również termcap, ale jego spuścizna nie jest już używana).
Powiedzmy, że masz program, który chce wyświetlać czerwony tekst. Zasadniczo wywołuje bibliotekę terminfo, która mówi „ podaj mi sekwencję bajtów, którą muszę wysłać na czerwony tekst dla terminala xterm ”. Następnie pobiera te bajty i drukuje je.
Możesz tego spróbować samodzielnie tput setf 4; echo hi
. Spowoduje to uzyskanie setf
możliwości terminfo i przekazanie jej parametru określającego żądany 4
kolor.
Dlaczego terminal gnome polega na sobie:
Powiedzmy teraz, że masz nowy błyszczący emulator terminala, który właśnie został wydany, a systemowa biblioteka terminfo nie ma jeszcze dla niego definicji. Gdy aplikacja przejdzie w celu sprawdzenia, jak coś zrobić, zakończy się niepowodzeniem, ponieważ terminal nie jest znany.
Sposób, w jaki omijasz ten terminal, polega na kłamaniu na temat tego, kto to jest. Więc twój terminal gnomów mówi „ Jestem Xterm ”.
Xterm jest bardzo podstawowym terminalem, który istnieje od początku X11, a zatem większość emulatorów terminali obsługuje to, co obsługuje. Tak więc, mówiąc, że terminal gnome mówi, że jest to xterm, bardziej prawdopodobne jest, że będzie miał definicję w bibliotece terminfo.
Wadą tego typu terminala jest to, że terminal może obsługiwać znacznie więcej niż Xterm (na przykład wiele nowych terminali obsługuje 256 kolorów, podczas gdy starsze terminale obsługują tylko 16). Masz więc kompromis, zyskujesz więcej funkcji lub masz większą kompatybilność. Większość terminali zdecyduje się na większą kompatybilność, a tym samym reklamuje się jako xterm
.
Jeśli chcesz to zmienić, wiele terminali oferuje pewien sposób konfiguracji zachowania. Ale możesz też po prostu zrobić export TERM=gnome-terminal
.
$TERM
ustawionyxterm
za dobry powódTERM
Zmienna wskazuje na terminalu typu , nie terminal aplikacji .TERM
ma określony cel: mówi aplikacjom działającym w tym terminalu, w jaki sposób ma on działać z terminalem.Aplikacje współdziałają z terminalami, pisząc sekwencje specjalne - sekwencje znaków, które zawierają znaki niedrukowalne i mają takie efekty, jak przesuwanie kursora, usuwanie części ekranu, zmiana bieżącego koloru itp. W dawnych czasach różne marki fizycznych terminali miały różne zestawy sekwencji ucieczki. Dlatego system operacyjny utrzymuje bazę danych typów terminali i ich cech. Tradycyjna baza danych to termcap („MOŻLIWOŚCI TERMINALNE”); wiele nowoczesnych systemów i aplikacji przeszło na terminfo . Obie bazy danych są indeksowane według nazwy typu terminala, a aplikacje sprawdzają je przy użyciu nazwy typu terminala ze
TERM
zmiennych środowiskowych.Obecnie większość terminali używa standardowego zestawu sekwencji specjalnych z kilkoma wspólnymi zestawami rozszerzeń, więc nie zobaczysz wielu różnych wartości
TERM
. Większość emulatorów terminali GUI jest zgodnych z Xterm , tradycyjnym terminalem X (który jest nadal używany i obsługiwany).Emulatory terminali, które różnią się od xterm, mogą dodawać własne wpisy do bazy danych terminali pod własną nazwą. Nie działa to jednak dobrze ze zdalnymi powłokami. Program działający na komputerze A, ale wyświetlany na komputerze B, na przykład ponieważ został uruchomiony za pośrednictwem ssh z B do A, musi wysłać zapytanie do bazy danych terminali na komputerze A. Metody zdalnego logowania, takie jak ssh, przenoszą
TERM
zmienną środowiskową, ale jest to pomocne tylko wtedy, gdy baza terminali B ma również wpis dla wartości użytkownika na A. Dlatego wiele emulatorów terminali trzyma się tego,TERM=xterm
co jest powszechnie znane.Różnice między terminalami w dużej mierze nie wynikają ze sposobu interakcji aplikacji z nimi, ale ze sposobu, w jaki terminale wchodzą w interakcję z użytkownikiem i pasują do jego środowiska. Na przykład Gnome Terminal wygląda dobrze na Gnome i zapewnia zakładki i inne drobiazgi; Konsole wygląda dobrze w KDE i zapewnia zakładki i inne dodatki; urxvt ma małe zapotrzebowanie na pamięć; Console2 działa w systemie Windows; screen i tmux zapewniają sesje, które można podłączyć do różnych terminali nadrzędnych; i tak dalej. Ponieważ żadna z tych funkcji nie ma znaczenia dla aplikacji działających w terminalu, większość emulatorów terminali używa
TERM=xterm
.Aby dowiedzieć się, na którym terminalu działa powłoka, spójrz na element nadrzędny powłoki:
źródło
ps -p$PPID
Wydaje się, że bieganie nie mówi mi, z którego terminala korzystam. A przynajmniej nie w sposób, który rozumiem. Czy masz przykładowy wynik / odpowiedź?Zmienna środowiskowa TERM nie oznacza używanego terminala.
Cytując gnu.org :
źródło