[LinuxFocus-icon]
<--  | Strona G��wna  | Mapa Serwisu  | Indeks  | Szukaj

Nowo�ci | Archiwum | Linki | O Nas
Ten dokument jest dost�pny w nast�puj�cych j�zykach: English  ChineseGB  Deutsch  Francais  Nederlands  Russian  Turkce  Polish  

[Photo of the Author]
Nico Golde
<nico/at/ngolde.de>

O Autorze:

Obecnie Nico jest wci�� uczniem. Od kilku lat zajmuje si� z determinacj� Linuksem, uczestniczy tak�e w kilku projektach Open Source.



T�umaczenie na j�zyk polski:
B.J.F. Stobiecki <bjfs/at\op.pl>

Zawarto��:

 

Kolorowe Pow�oki -- U�ywanie kolorowych sekwencji wyj�cia ANSI

ansi colors

Notka:

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.

_________________ _________________ _________________

 

Wprowadzenie

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�.

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.  

Konfiguracja Pow�oki

Ustawianie kolor�w pow�oki ma miejsce w osobistym pliku konfiguracyjnym bash ~/.bashrc b�d� w globalnym pliku konfiguracyjnym /etc/bashrc. Wygl�d znaku zach�ty jest ustawiany przez zmienn� �rodowiskow� PS1 w bashrc.

Og�lnie, wpis powinien wygl�da� tak:
~/.bashrc: PS1="\s-\v\$ "
\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:
~/.bashrc: PS1="\u@\h \w \$ "
Oznacza to u�ytkownik@ obecny_katalog $. Jest to znak zach�ty, z kt�rym wi�kszo�� u�ytkownik�w Linux jest obeznana.  

Sekwencje Wyj�cia

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).

Aby bezpo�rednio w pow�oce wprowadzi� sekwencj� wyj�cia mo�emy j� poprzedzi� poprzez ctrl-v: CTRL-v ESC  

U�ywanie Kolor�w Pow�oki

Wyt�umacz� kolory pow�oki z przyk�adowym znakiem zach�ty.
~/.bashrc: PS1="\[\033[0;32;40m\u@\h:\w\$ \]"
Wy�wietla to ca�y znak zach�ty w zieleni. Jak tutaj:
nico@ebrain:~$

\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.

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.

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).

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.

Przyk�ad:
~/.bashrc: PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"

To daje nam bardzo kolorowy znak zach�ty:
nico@ ebrain: ~$

Aby wybr�bowa� te ustawienia u�yjemy export PS1="string", p�niej mo�emy przenie�� je do .bashrc. M�j obecny znak zach�ty wygl�da tak:
PS1="\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] "

[ nico@ebrain:~ ]
 

W�a�ciwo�ci Tekstu

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.

Za pomoc� nast�puj�cego skryptu pow�oki mo�emy dostrzec r�ne kombinacje kolor�w.
#!/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
Skrypt ten mo�e by� �ci�gni�ty w postaci tar.gz z: showansicol.tar.gz  

Inne Zastosowanie


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�.

Do u�ywania kolor�w zastosowanie bibliotek takich jak slang, lub ncurses by�oby potrzebne. Zwi�kszy�oby to jednak wielko�� pliku binarnego. Ncurses ma zalet� w byciu bardziej lub mniej niezale�ne od rodzaju terminala.  

Przyk�ady w C

'Hello World' na zielono:
#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;
}
Inn� u�yteczn� sekwencj� wyj�ciow� jest printf("\033[2J"), ma ona ten sam efekt jak system(clear), lecz plik nag��wkowy unistd.h mo�e by� wykluczony.

Z printf("\033[1K") mo�emy usun�� lini�.  

Przyk�ady dla skrypt�w inicjuj�cych

Gdyby�my chcieli mie� kolorowe, czytelne potwierdzenie pomy�lnej egzekucji skrypt�w inicjuj�cych /etc/init.d to mo�emy zamiast prostego '.' zastosowa� sekwencj� wyj�ciow�.

To jest wyci�g ze skryptu inicjuj�cego cron:
#!/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 "."
;;

Pomy�lna egzekucja cron b�dzie symbolizowana kropk�. Kolorow� odmian� tego by�oby zastosowanie [Ok] poprzez zmian� ci�gu echo, n.p.:
#!/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\]"
    ;;
Zastosowanie tych zmian do wszystkich skrypt�w init jest bardzo czasoch�onne. Chyba, �e u�yjemy sekwencji wyj�ciowej \033, gdy� Ctrl-v nie jest interpretowane jako znak.  

Komentarze

Komentarze, krytyk�, b��dy, itp. prosz� s�a� na "nico at ngolde.de". Mi�ej zabawy...  

Dyskusja dotycz�ca tego artyku�u

Komentarze do dyskusji:
 Strona talkback 

<--, powr�t na stron� g��wn� tego wydania

Strona prowadzona przez redakcj� LinuxFocus
© Nico Golde, FDL
LinuxFocus.org
t�umaczenie:
de --> -- : Nico Golde <nico/at/ngolde.de>
de --> en: Jürgen Pohl <sept.sapins(at)verizon.net>
en --> pl: B.J.F. Stobiecki <bjfs/at\op.pl>

2004-07-07, generated by lfparser version 2.46