Natknąłem się na sekwencje bash, takie jak \033[999D
i, \033[2K\r
które służą do pewnych manipulacji na wydruku na terminalu. Ale co oznaczają te sekwencje? Gdzie mogę znaleźć listę / podsumowanie w Internecie, aby pomóc mi znaleźć znaczenie tych sekwencji?
19
Odpowiedzi:
Zobacz ten link http://www.termsys.demon.co.uk/vtansi.htm . Jak mówi Anthon,
\033
jest to ósemkowy kod w stylu C dla znaku zmiany znaczenia.[999D
Przesuwa kursor z powrotem do 999 kolumn, przypuszczalnie brute force sposób dotarcia do początku wiersza.[2K
usuwa bieżącą linię.\r
jest znakiem powrotu karetki, który przeniesie kursor z powrotem na początek bieżącej linii i jest sekwencją ucieczki w stylu C, a nie końcową sekwencją sterującą.Aktualizacja
Jak zauważyli inni, te sekwencje kontrolne nie są niczym innym,
bash
jak raczej urządzeniem końcowym / emulatorem, na którym pojawia się tekst. Pewnego razu sekwencje te były interpretowane przez zupełnie inny sprzęt. Początkowo każdy reagował na zupełnie inne zestawy kodów. Aby sobie z tym poradzić, bibliotekitermcap
iterminfo
służą do pisania kodu zgodnego z wieloma terminalami.tput
Komenda jest interfejsem doterminfo
biblioteki (termcap
wsparcie może być również zestawiane w) i jest bardziej wydajny sposób na tworzenie kompatybilnych sekwencje.To powiedziawszy, istnieje również standard ANSI X3.64 lub ECMA-48 . Wykorzysta to każda nowoczesna implementacja terminalu.
terminfo
itermcap
nadal są istotne, ponieważ implementacja może być niekompletna lub zawierać niestandardowe rozszerzenia, jednak dla większości celów można bezpiecznie założyć, że wspólne sekwencje ANSI będą działać.xterm
FAQ zapewnia kilka ciekawych informacji na temat różnic między nowoczesne emulatory terminali (wielu po prostu starają się naśladowaćxterm
siebie) i jakxterm
sekwencje dotyczą terminali VT100 wymienionych w powyższym linku. Zapewnia również ostateczną listęxterm
sekwencji kontrolnych .Oczywiście powszechnie używana jest również konsola Linux, w której można znaleźć ostateczną listę sekwencji kontrolnych
man console_codes
, wraz z porównaniem doxterm
.źródło
tput
poleceń, aby mieć większą przenośność, iirc (ale kosztem mniejszego pokrycia specyfiki twojego terminala). VT100 (ten, o którym mówi strona) jest obsługiwany przez wielu (ale nie wszystko jest obsługiwane, wierzę ...). Ale twoja zmienna TERM może być ustawiona na inny terminal, a to może wpłynąć na działanie niektórych poleceńtput
jest bardziej niezawodnym sposobem. Ale to raczej kompatybilność ANSI niż konkretny terminal VT100 jest teraz dość wszechobecny, chociaż wydaje mi się, że można ustawićxterm
tryb, który ich nie akceptuje. Myślę, że zaktualizuję o kilka więcej informacji na ten temat.TERM=xterm
się, ale nie implementuje wszystkiego, coxterm
robi.Jest
\033
to znak zmiany znaczenia, a sekwencje te nie są specyficzne dla basha, ale są interpretowane przez terminal (oprogramowanie lub sprzęt (przez sieć lub linię szeregową)), w którym działa program (bash). Istnieje wiele takich sekwencji .To, co robi każdy, zależy od terminala, od którego jest zależny, i może również zależeć od dowolnej poprzedniej sekwencji zmieniającej stan terminala.
Są one często używane do ustawiania kolorów w oknie zachęty , ale nie znalazłem konkretnych przykładów na tej stronie.
źródło
„\ 033 [999D” jest zabawny. Niektóre terminale implementują mniej sekwencji ucieczki, więc może to być potrzebne, jeśli żaden z „\ 033 [1G”, „\ 033 [1; 1H”, „\ 033 [1; 1f” lub „\ r” nie zachowuje się tak, jak powinien, ale kto używa wyświetlania tekstu w tysiącach kolumn? Te sekwencje mają stronę podręcznika w systemie Linux: console_codes (4) . bjh21 ma szczegółową listę wszystkich kodów . W zależności od tego, który program analizuje „\ 033”, dostępne może być bardziej wyraźne podstawienie „\ e”.
Naprawdę nie jest zamierzone, aby były one używane bezpośrednio - poprawnym sposobem wydawania poleceń sterujących terminalem jest warstwa abstrakcji, taka jak ncurses - ale działają one równie dobrze z literałów łańcuchowych.
źródło
\033[999D
że utworzy kopię zapasową w stosunku do poprzedniej linii. Może być to jednak wynikiem podejrzanego kodowania;) Możesz takżebash
bezpośrednio interpretować kody ucieczki, np.$'\033[999D'
możesz wyszukać „033 termiczna lista ucieczki” lub „ 033 tput ” i zobaczyć http://wiki.bash-hackers.org/scripting/terminalcodes, aby uzyskać więcej informacji, zanim ktoś odpowie;
źródło