Znalazłem wiele sekwencji ucieczki w Bash, zaczynając od \033]
, ale czym są te sekwencje i dlaczego się zaczynają \033]
?
Sznurek jest właściwie \033[
i to nie wszystko.
Po tym otworze otwierającym pojawia się seria cyfr i symboli. Ciąg ten nazywany jest sekwencją zmiany znaczenia i służy między innymi do kontrolowania kursora i koloru tekstu konsoli.
niedrukowalne sekwencje specjalne muszą być zawarte w
\[\033[ and \]
Jeśli sekwencja zmiany znaczenia kontroluje kolor tekstu, po nim następuje znak m
.
Oto tabela sekwencji kolorów:
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
Jeśli więc chcesz, aby monit konsoli był niebieski, zastosuj następującą sekwencję zmiany znaczenia (w nazwie pliku, której zapominam):
\[\033[34m\]
(Zauważ m
)
Ta sekwencja ucieczki nie tylko kontroluje kolor. Może także kontrolować ruch kursora. Oto tabela / lista z kodami ruchu i ich działaniem:
Ustaw kursor:
\033[<L>;<C>H
Lub
\033[<L>;<C>f
umieszcza kursor w linii L i kolumnie C.
Przesuń kursor w górę o N linii:
\033[<N>A
Przesuń kursor w dół N linii:
\033[<N>B
Przesuń kursor do przodu N kolumn:
\033[<N>C
Przesuń kursor do tyłu o N kolumn:
\033[<N>D
Wyczyść ekran, przejdź do (0,0):
\033[2J
Usuń do końca linii:
\033[K
Zapisz pozycję kursora:
\033[s
Przywróć pozycję kursora:
\033[u
Pamiętaj tylko, że dwa ostatnie mogą nie działać w używanym emulatorze terminali. Najwyraźniej tylko xterm
i nxterm
użyj tych dwóch sekwencji.
I przykład, używając jednej z tych sekwencji ucieczki: powiedz, że chcę ustawić kursor w wierszu 3, kolumnie (znaku) 9. W tym celu użyłbym
\[033\[3;9H]
(Zakładam, że kolumna 0 to pierwsza pozycja, więc byłby to ósmy znak).
Źródło: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (czytaj także 6.2)
Bardziej ogólne czytanie: http://ascii-table.com/ansi-escape-sequences.php
[2K
usuwa całą linię zarówno przed, jak i po kursorze. O wiele lepszym źródłem byłby artykuł z Wikipedii lub można przejść bezpośrednio do ECMA-48 , sekcja 8.3.117 SGR - Wybierz wersję graficzną .0;
sekwencji kolorów nie jest konieczne. To sprawia, że kolor tła jest domyślny przed ustawieniem pierwszego planu. Możesz także ustawić tło za pomocą4x
.Są to polecenia sterujące dla terminala.
Terminale były pierwotnie raczej głupimi urządzeniami podłączonymi do portu szeregowego, a nie tymi fantazyjnymi, wielozakładowymi programami GUI z menu, które mamy teraz. Ponieważ otrzymywali tylko strumień znaków (bajtów), nie było wyraźnego rozdziału między danymi (co drukować na ekranie) a poleceniami (jak je wydrukować). Zamiast tego polecenia są reprezentowane specjalnymi znakami kontrolnymi.
Oczywistymi znakami sterującymi są takie rzeczy, jak przesunięcie wiersza (nowa linia), backspace i dźwięk dzwonka, ale bardziej szczegółowe polecenia są podawane jako sekwencje znaków, zaczynające się od
ESC
znaku (kod 27 w systemie dziesiętnym, 0x1b w systemie szesnastkowym lub ósemkowy 033). Jest często przedstawiany jako^[
lub\033
w twoim przykładzie.Sekwencja
ESC [
nazywa się CSI lub wprowadzającym sekwencją kontrolną i rozpoczyna polecenie z opcjonalnymi parametrami numerycznymi, kończąc zwykle literą określającą główne polecenie. Większość typowych sekwencji ucieczki należy do tej klasy.Listy kodów ucieczki można znaleźć np. Na
console_codes(4)
stronie man oraz na stronie Wikipedii dla kodów ucieczki ANSI .Kilka przykładów:
Możesz przetestować polecenia za pomocą np. Bash. Za pomocą
-e
flagi wbudowaneecho
polecenie akceptuje\033
jako reprezentacjęESC
znaku.Np. Spowoduje to wydrukowanie kolorowego powitania na środku ekranu, a drugiego w normalnej pozycji kursora:
Sekwencja, o
ESC ]
której wspomniałeś, to OSC lub polecenie systemu operacyjnego, które jest najczęściej używane w poleceniu do ustawienia tytułu oknaxterm
i innych, np .:Są też
ESC ( A
(i inne litery), które ustawiają narodowe zestawy znaków na niektórych terminalach, co może mieć potencjalnie zabawny efekt .źródło
Klawisz Escape i prawy nawias kwadratowy escape
]
służą do wprowadzenia polecenia systemu operacyjnego (OSC
).Znajduje się w ECMA-48 i możesz przeczytać podsumowanie sekwencji kontrolnych używanych przez xterm w Sekwencjach kontrolnych XTerm , np. Do zmiany tytułu okna terminala.
Sekwencje specjalne mogą zaczynać się od różnych postaci. C1 (8-bit) Kontrola Postacie sekcja w xterm sekwencje kontrolne wymienia kilka z nich:
CSI
(co widać jako escape[
,APC
,DCS
,PM
. Powodem inny (drugi) charakteru dlatego, że para (uciec i]
) jest związany z jednobajtowy znak kontrolny używany dla różnych typów sekwencji zmiany znaczenia.Jeśli przeczytasz specyfikację, zauważysz, że
CSI
jest używana w kontrolkach z parametrami numerycznymi, a jednocześnieOSC
pozwala na napisy. Oprócz samej składni komitet, który stworzył ten standard, miał na myśli zastosowania dla,APC
aPM
które różniły się odDCS
iOSC
.źródło
Są to tak zwane kody ucieczkowe ANSI i są wymienione na stronie podręcznika dla konsoli_kodów . Nie są one specyficzne dla Bash, ale raczej działają w dowolnej aplikacji konsolowej, o ile terminal je obsługuje (większość emulatorów terminali to robi).
źródło
„Sekwencje specjalne” opisane w innych odpowiedziach zależą od posiadanego TYPU terminala (najczęściej „ANSI” lub pochodnych / podobnych).
Jeśli chcesz pisać skrypty, które są (w pewnym stopniu) NIEZALEŻNE od terminala, ale nadal używają np. Koloru i innych specjalnych funkcji, zapoznaj się z treścią
man terminfo
.na przykład
wydrukuje
.test.
ztest
żółtawym tłem i czerwonym kolorem pierwszego planu, a to zadziała dla DOWOLNEGO terminala, który faktycznie może używać kolorów w ten sam sposób.Aby zobaczyć, co jest faktycznie wydrukowane, włóż je do niego
od -t x1z
tak, jak w... gdzie wartości są wyświetlane w systemie szesnastkowym (z powodu „x”).
źródło