I nie mów „ $TERM” - zawsze tak jest xterm.
W jaki sposób bashskrypt może stwierdzić, w którym terminalu działa, a konkretnie czy jest to iTerm, Terminal.app, czy faktycznie xterm?
Pytam, ponieważ resetnie 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ć resetją 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 resetpraca 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-bunchmieć dostęp do pracy.) Terminal.app i iTerm rzucają klucz w tym planie, nie wdrażając resetpoprawnie.
Oznacza to, że zwykłe zastąpienie resetto nie wszystko: jeśli korzystam z komputera z systemem Linux, musi wiedzieć, czy używam, gnome-terminalczy 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.
resetpolecenie 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.appustawienia, 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.