I nie mów „ $TERM
” - zawsze tak jest xterm
.
W jaki sposób bash
skrypt może stwierdzić, w którym terminalu działa, a konkretnie czy jest to iTerm, Terminal.app, czy faktycznie xterm?
Pytam, ponieważ reset
nie działa¹ po wyjęciu z pudełka w Terminal.app i iTerm2. Jednak iTerm2 rozpoznaje sekwencję ucieczki podczas resetowania terminala ( \x1b]50;ClearScrollback\x07
), a gdybym mógł ją wykryć, mógłbym zastąpić reset
ją aliasem, który robi to dobrze. AFAICT, Terminal.app nie ma sekwencji resetowania, a ludzie uciekają się do absurdalnego hakowania tomów, aby włamać się do tego .
Moim ostatecznym celem jest, aby reset
praca była taka sama, niezależnie od tego, czy pracuję na OS X, czy Linux, pracuję lokalnie lub zdalnie przez SSH. (Nie chcę próbować pamiętać, które z nich są przydatne i warto reset && command-that-outputs-a-bunch
mieć dostęp do pracy.) Terminal.app i iTerm rzucają klucz w tym planie, nie wdrażając reset
poprawnie.
Oznacza to, że zwykłe zastąpienie reset
to nie wszystko: jeśli korzystam z komputera z systemem Linux, musi wiedzieć, czy używam, gnome-terminal
czy iTerm, aby wysłać prawidłową sekwencję zmiany znaczenia.
Czy jest jakiś sposób (nawet jeśli potrzebuję ioctl
), aby zapytać terminal, co to naprawdę jest?
¹ Dla celów tego pytania resetowanie powinno wyczyścić ekran, zresetować kursor i wyczyścić bufor przewijania.
reset
, ponieważ tak wiedzą moje palce.
reset
polecenie wyczyści zawartość przewijania wstecz emulatora terminala, ale nie jest to gwarantowane, ponieważ przewijanie wstecz jest funkcją specyficzną dla emulatora terminala, a nie część terminala. Jednak Terminal obsługuje rozszerzenie sekwencji ucieczki ED (Erase in Display), aby usunąć przewijanie do tyłu ESC [ 3 J
. Możesz wyczyścić ekran, a następnie użyć go np.reset && printf '\e[3J’
xterm
(przez TERM=xterm
), spodziewam się, że emulujesz nadzbiór XTerm , który usuwa resetowanie po zresetowaniu. (Tak jakbyś wysłał sekwencję ucieczki dla „niebieskiego”, spodziewałbyś się niebieskiego.) To prawda, mój xterm mówi mi to Erase is backspace.
, czego jestem wdzięczny, nic więcej; to po prostu denerwujące.
Terminal.app
ustawienia, zakładkę terminala i ustawisz linie przewijania na 0? Czy to wyłącza cały tekst powyżej bieżącego wiersza, czy tylko cokolwiek powyżej górnej części ekranu? Wiem, że nie jest to dokładnie to, o co prosiłeś, warte strzału.