Odpowiedzi:
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>APrzesuń kursor w dół N linii:
\033[<N>BPrzesuń kursor do przodu N kolumn:
\033[<N>CPrzesuń kursor do tyłu o N kolumn:
\033[<N>DWyczyść ekran, przejdź do (0,0):
\033[2JUsuń do końca linii:
\033[KZapisz pozycję kursora:
\033[sPrzywróć pozycję kursora:
\033[uPamiętaj tylko, że dwa ostatnie mogą nie działać w używanym emulatorze terminali. Najwyraźniej tylko xtermi nxtermuż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
[2Kusuwa 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 ESCznaku (kod 27 w systemie dziesiętnym, 0x1b w systemie szesnastkowym lub ósemkowy 033). Jest często przedstawiany jako ^[lub \033w 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:
ESC [ 4 A move cursor 4 lines up (4 can be any number)
ESC [ 5 B move cursor 5 lines down
ESC [ 2 K erase current line
ESC [ 30;46 m set black text (30) on cyan background (46)
ESC [ 0 m reset color and attributes
Możesz przetestować polecenia za pomocą np. Bash. Za pomocą -eflagi wbudowane echopolecenie akceptuje \033jako reprezentację ESCznaku.
Np. Spowoduje to wydrukowanie kolorowego powitania na środku ekranu, a drugiego w normalnej pozycji kursora:
echo -e '\033[s\033[12;30f\033[30;46m Hello! \033[0m\033[uhello'
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 okna xtermi innych, np .:
echo -e '\033]0;new window title\a'
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 .
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 CSIjest używana w kontrolkach z parametrami numerycznymi, a jednocześnie OSCpozwala na napisy. Oprócz samej składni komitet, który stworzył ten standard, miał na myśli zastosowania dla, APCa PMktóre różniły się od DCSi OSC.
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).
„Sekwencje specjalne” opisane w innych odpowiedziach zależą od posiadanego TYPU terminala (najczęściej „ANSI” lub pochodnych / podobnych).
$ echo $TERM
xterm
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
$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."
wydrukuje .test.z testżół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 x1ztak, jak w
$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d >.(B.[m<
0000006
... gdzie wartości są wyświetlane w systemie szesnastkowym (z powodu „x”).