Standardowe strumienie, przekierowania i potoki

Każde polecenie w systemie UNIX ma dostęp dotrzech funkcji systemowych: standardowe wejście (standard input - stdin), standardowe wyjście (standard output - stdout), standardowe wyjście diagnostyczne - błędów (standard error output - stderr). Stosowanie standardowych strumieni jest wygodne, gdyż można je łatwo przypisać plikom lub potokom. Operatorem przekierowania (przeadresowania standardowego wyjścia jest znak >. Standardowe wyjście diagnostyczne przekierowujemy używając operatora: 2>. Standardowe wejście przeadresowujemy operatorem <.

Przykłady:
ls > lista
Zapisanie w pliku lista nazw plików i katalogów z katalogu bieżącego
cat plik1 > plik2
Zapisanie zawartości pliku plik1 do pliku plik2
man ls > pomoc
Umieszczenie treści pomocy do polecenia ls w pliku pomoc
wc < lista
Wyznaczenie liczby wierszy, słów i znaków w pliku lista
cal 2005 > Rok2005
Zapisanie kalendarza na rok 2005 do pliku Rok2005

Powłoka (shell) ustawia przeadresowanie przed uruchomieniem polecenia, po czym usuwa znaki przeadresowania z polecenia tak, że samo polecenie ich nie widzi. Stąd, w konsekwencji, poniższe trzy polecenia są sobie równoważne:
cal 2000 > Rok2000
cal > Rok2000 2000
> Rok2000 cal 2000

Ponieważ operator > jest skrótem od 1> stąd następujące polecenia są równoważne:
cal 2000 > Rok2000
cal 2000 1> Rok2000


Przy stosowaniu operatora > pierwotna zawartość plików docelowych zostaje skasowana. Jeżeli nie chcemy utracić pierwotnej zawartości pliku docelowego, używamy operatora dopisywania: >>

Przykłady:
man cd > plik
man ls >> plik
whoami >> plik
wc < plik > wynik

Powyższe polecenia spowodują utworzenie pliku plik, w którym zapisana będzie treść pomocy do poleceń: cd oraz ls oraz nazwa użutkownika. Następnie polecenie wc wyznaczy liczbę linii, wyrazów i znaków, i wpisze je do pliku wynik.
Komunikaty o błędach można wyprowadzać niezależnie od standardowego wyjścia używając operatora 2>

Przykłady:
polecenie 2> bledy
polecenie > log 2> bledy
polecenie 2> bledy > log
polecenie > log

W pierwszym przykładzie wyjście standardowe nie zostało przeadresowane i zostanie wyprowadzone na ekran, podczas gdy ewentualne komunikaty o błędach zostaną zapisane w pliku bledy i nie pojawią się na ekranie. W drugim przypadku standardowe wyjście zostanie przeadresowane do pliku log a wyjście diagnostyczne (błędów) zostanie przeadresowane do pliku bledy. polecenie trzecie jest równoważne drugiemu. W przypadku czwartym, wyjście diagnostyczne nie zostało przeadresowane i ewentualne komunikaty obłędach pojawią się na ekranie.
Aby zapisać standardowe wyjście oraz wyjście diagnostyczne do jednego pliku należy użyć konstrukcji: 2>&1 np.:
polecenie > wynik 2>&1
Operator 2>&1 musi być wpisany po przeadresowaniu wyjścia standardowego. Operator ten oznacza przeadresowanie wyjścia diagnostycznego tam, gdze jest skierowane wyjście standardowe.

W systemie UNIX zastosowano system potoków umożliwiających skierowanie wyników działania jednego programu lub polecenia na wejście innego. Służy do tego symbol | (ang. pipe):

Przykład:
ls /home/artemis/stud | more

Ćwiczenia:


Valid XHTML 1.0 Transitional Valid CSS!