<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <!-- this stylesheet will later on be added by lfparser automatically: --> <style type="text/css"> <!-- pre { font-family:monospace,Courier } pre.code { font-family:monospace,Courier;background-color:#aedbe8; } p.code { width:80%; alignment:center; background-color:#aedbe8; border-style:none; border-width:medium; border-color:#aedbe8; padding:0.1cm ; text-align:left } --> </style> <title></title> </head> <body> <!-- <h1>Bunte Shells - Benutzung der Shellfarben</h1>--> <h1>Kolorowe Pow�oki -- U�ywanie kolorowych sekwencji wyj�cia ANSI</h1> <h4>ArticleCategory: Hardware</h4> SystemAdministration <h4>AuthorImage:[Here we need a little image from you]</h4> <img src="../../common/images2/NicoGolde.jpg" alt= "[Photo of the Author]" width="136" height="207"> <h4>TranslationInfo:[Author + translation history. mailto: or http://homepage]</h4> <p>original in de <a href="nospam:nico/at/ngolde.de">Nico Golde</a></p> <p>de to en <a href= "nospam:sept.sapins(at)verizon.net">Jürgen Pohl</a></p> <p>en to pl <a href="nospam:bjfs/at\op.pl">B.J.F. Stobiecki</a> </p> <h4>AboutTheAuthor:[A small biography about the author]</h4> <p>Obecnie Nico jest wci�� uczniem. Od kilku lat zajmuje si� z determinacj� Linuksem, uczestniczy tak�e w kilku projektach Open Source.</p> <h4>Abstract:</h4> W terminalu kompatybilnym ze standardem ANSI (jak xterm, rxvt, konsole ...) tekst mo�e by� wy�wietlany w kolorach innych ni� czer� i biel. Ten artyku� zademonstruje tekst pogrubiony b�d� kolorowy. <h4>ArticleIllustration:</h4> <img src="../../common/images2/illustration335.gif" alt= "ansi colors" hspace="10" width="220" height="139"> <h4>ArticleBody:</h4> <h2>Wprowadzenie</h2> Na codzie� ka�dy u�ytkownik Linux styka si� z pow�ok� Bash. Pocz�tkowo wydaje si� on bardzo nudny, ale jest wiele mo�liwo�ci aby go zindywidualizowa�. Kolorowanie znaku zech�ty czyni pow�ok� zar�wno lepsz� jak i bardziej czyteln�.<br> <br> W swoim opisie b�de si� odwo�ywa� do pow�oki Bash. Sekwencje wyj�cia mog� si� r�ni� w zale�no�ci od poszczeg�lnych terminali. W tym artykule u�ywam terminal ANSI. <h2>Konfiguracja Pow�oki</h2> Ustawianie kolor�w pow�oki ma miejsce w osobistym pliku konfiguracyjnym bash <i>~/.bashrc</i> b�d� w globalnym pliku konfiguracyjnym <i>/etc/bashrc</i>. Wygl�d znaku zach�ty jest ustawiany przez zmienn� �rodowiskow� PS1 w <i>bashrc</i>.<br> <br> Og�lnie, wpis powinien wygl�da� tak: <table><tr><td> <pre class="code"> ~/.bashrc: PS1="\s-\v\$ " </pre> \s oznacza nazw� pow�oki, a -\v oznacza jej wersj�. Na ko�cu znaku zach�ty ustawiamy $. Poniewa� jest to do�� nudne, nast�puj�cy wpis - kt�ry jest domy�lny dla wi�kszo�ci dystrybucji Linux - mo�e by� u�yty: <pre class="code"> ~/.bashrc: PS1="\u@\h \w \$ " </pre> </td></tr></table> Oznacza to u�ytkownik@ obecny_katalog $. Jest to znak zach�ty, z kt�rym wi�kszo�� u�ytkownik�w Linux jest obeznana. <h2>Sekwencje Wyj�cia</h2> Aby doda� osobisty urok koloruj�c znak zach�ty, b�dziemy u�ywali sekwencji wyj�cia. Sekwencja wyj�cia jest instrukcj� kontroln�, kt�ra nakazuje pow�oce wykonanie okre�lonego kroku. Sekwencja wyj�cia z regu�y zaczyna si� od znaku ESC (st�d nazwa) [po angielsku sekwencja wyj�cia nazywa si� escape sequence, przyp. t�um.]. W pow�oce pokazywana jest jako ^[. Taki styl pisania wymaga przyzwyczajenia, \033 oznacza to samo (ESC w ASCII jest dziesi�tnie 27, kt�re �semkowo daje 33).<br> <br> Aby bezpo�rednio w pow�oce wprowadzi� sekwencj� wyj�cia mo�emy j� poprzedzi� poprzez ctrl-v: <i>CTRL-v ESC</i> <h2>U�ywanie Kolor�w Pow�oki</h2> Wyt�umacz� kolory pow�oki z przyk�adowym znakiem zach�ty. <pre class="code"> ~/.bashrc: PS1="\[\033[0;32;40m\u@\h:\w\$ \]" </pre> Wy�wietla to ca�y znak zach�ty w zieleni. Jak tutaj:<br> <center> <table cellpadding="10" border="0"> <tbody> <tr> <td colspan="1" bgcolor="#000000" rowspan="1"><font color="#00ff00">nico@ebrain:~$</font> </td> </tr> </tbody> </table> </center> <br> \033 rozpoczyna sekwencj� wyj�ciow�, z [ zaczynamy definicj� kolor�w. Nast�puj�ce 0 okre�la domy�ln� szeroko�� czcionki. Inne mo�liwo�ci odno�nie tego przedstawi� p�niej. Ci�g znak�w b�dzie otoczony w \[ i \] , aby powstrzyma� tekst sekwencji wyj�ciowej przed pokazywaniem si� na pow�oce i zajmowaniu zbyt wiele miejsca.<br> <br> Nast�pnie wybierzemy kolor pierwszego planu (w tym przypadku 32, kt�re oznacza ziele�). Kolor t�a 40 okre�la czer�. Aby powstrzyma� tekst po znaku zach�ty przed wy�wietlaniem si� na zielono, zamkniemy sekwencj� wyj�ciow� poprzez \033[0m , kt�ry jest domy�lnym kolorem pow�oki. Dla pierwszego planu jak i t�a mamy osiem kolor�w.<br> <br> Do wyboru mamy: czerwony, zielony, ��ty, niebieski, karmazynowy, turkusowy i bia�y. Kody kolor�w: 30 (czarny), 31 (czerwony), 32 (zielony), 33 (��ty), 34 (niebieski), 35 (karmazynowy), 36 (turkusowy), 37 (bia�y).<br> <br> Ustawianie t�a jest bazowane na tej samej zasadzie, z tym, �e zamiast pierwszej cyfry '3' u�ywamy '4', jak 40, 41, 42, 43, 44, 45, 46, 47.<br> <br> Przyk�ad: <pre class="code"> ~/.bashrc: PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]" </pre> <br> To daje nam bardzo kolorowy znak zach�ty:<br> <center> <table cellpadding="10" border="0"> <tbody> <tr> <td colspan="1" bgcolor="#000000" rowspan="1"> <table cellpadding="0" border="0" cellspacing="0"> <tbody> <tr> <td colspan="1" bgcolor="#0000ff" rowspan="1"> <font color="#ffffff">nico@</font></td> <td colspan="1" bgcolor="#aa5500" rowspan="1"> <font color="#00ff00">ebrain:</font></td> <td colspan="1" bgcolor="#ff3030" rowspan="1"> <font color="#aa5500">~$</font></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> </center> <br> Aby wybr�bowa� te ustawienia u�yjemy <i>export PS1="string"</i>, p�niej mo�emy przenie�� je do <i>.bashrc</i>. M�j obecny znak zach�ty wygl�da tak: <pre class="code"> PS1="\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] " </pre> <br> <center> <table cellpadding="10" border="0"> <tbody> <tr> <td colspan="1" bgcolor="#000000" rowspan="1"><b><font color="#0000ff">[</font> <font color= "#ff0000">nico@ebrain:~</font> <font color= "#0000ff">]</font></b> </td> </tr> </tbody> </table> </center> <h2>W�a�ciwo�ci Tekstu</h2> Jak wcze�niej wspomina�em, '0' przed pierwsz� sekwencj� wyj�ciow� jest domy�lnym ustawieniem koloru dla tekstu znaku zach�ty pow�oki. Do w�a�ciwo�ci tekstu nast�puj�ce warto�ci maj� znaczenie: 0, 1, 22, 4, 24, 5, 25, 7, 27, kt�re oznaczaj�: domy�lny, pogrubiony, niepogrubiony, podkre�lony, niepodre�lony, mruganie, bez mrugania, inwersja, bez inwersji.<br> <br> Za pomoc� nast�puj�cego skryptu pow�oki mo�emy dostrzec r�ne kombinacje kolor�w. <pre class="code"> #!/bin/sh ############################################################ # Nico Golde <nico(at)ngolde.de> Homepage: http://www.ngolde.de # Last change: Mon Feb 16 16:24:41 CET 2004 ############################################################ for attr in 0 1 4 5 7 ; do echo "----------------------------------------------------------------" printf "ESC[%s;Foreground;Background - \n" $attr for fore in 30 31 32 33 34 35 36 37; do for back in 40 41 42 43 44 45 46 47; do printf '\033[%s;%s;%sm %02s;%02s ' $attr $fore $back $fore $back done printf '\n' done printf '\033[0m' done </pre> Skrypt ten mo�e by� �ci�gni�ty w postaci <i>tar.gz</i> z: <a shape= "RECT" href= "../../common/src2/article335/showansicol.tar.gz"> showansicol.tar.gz</a> <h2>Inne Zastosowanie</h2> <br> Mo�liwo�� ustawiania kolor�w pow�oki nie jest wy��cznie u�yteczna do tworzenia �adniejszego znaku zach�ty pow�oki, ale tak�e mo�e by� u�yteczny dla program�w pisanych na konsol� tekstow�.<br> <br> Do u�ywania kolor�w zastosowanie bibliotek takich jak <i>slang</i>, lub <i>ncurses</i> by�oby potrzebne. Zwi�kszy�oby to jednak wielko�� pliku binarnego. <i>Ncurses</i> ma zalet� w byciu bardziej lub mniej niezale�ne od rodzaju terminala. <h2>Przyk�ady w C</h2> 'Hello World' na zielono: <pre class="code"> #include <stdio.h> int main(void){ const char *const green = "\033[0;40;32m"; const char *const normal = "\033[0m"; printf("%sHello World%s\n", green, normal); return 0; } </pre> Inn� u�yteczn� sekwencj� wyj�ciow� jest <i>printf("\033[2J")</i>, ma ona ten sam efekt jak <i>system(clear)</i>, lecz plik nag��wkowy <i>unistd.h</i> mo�e by� wykluczony.<br> <br> Z <i>printf("\033[1K"</i>) mo�emy usun�� lini�. <h2>Przyk�ady dla skrypt�w inicjuj�cych</h2> Gdyby�my chcieli mie� kolorowe, czytelne potwierdzenie pomy�lnej egzekucji skrypt�w inicjuj�cych <i>/etc/init.d</i> to mo�emy zamiast prostego <i>'.'</i> zastosowa� sekwencj� wyj�ciow�.<br> <br> To jest wyci�g ze skryptu inicjuj�cego <i>cron</i>: <pre class="code"> #!/bin/sh # Start/stop the cron daemon. test -f /usr/sbin/cron || exit 0 case "$1" in start) echo -n "Starting periodic command scheduler: cron" start-stop-daemon --start --quiet --exec /usr/sbin/cron echo "." ;; </pre> Pomy�lna egzekucja <i>cron</i> b�dzie symbolizowana kropk�. Kolorow� odmian� tego by�oby zastosowanie [Ok] poprzez zmian� ci�gu <i>echo</i>, n.p.: <pre class="code"> #!/bin/sh # Start/stop the cron daemon. test -f /usr/sbin/cron || exit 0 case "$1" in start) echo -n "Starting periodic command scheduler: cron" start-stop-daemon --start --quiet --exec /usr/sbin/cron echo "\[ \033[1;34;40m[ \033[1;32;40mOk \033[1;34;40m]\033[0m\]" ;; </pre> Zastosowanie tych zmian do wszystkich skrypt�w <i>init</i> jest bardzo czasoch�onne. Chyba, �e u�yjemy sekwencji wyj�ciowej \033, gdy� <i>Ctrl-v</i> nie jest interpretowane jako znak. <h2>Komentarze</h2> Komentarze, krytyk�, b��dy, itp. prosz� s�a� na "nico at ngolde.de". Mi�ej zabawy... </body> </html>