Każde polecenie w systemie UNIX ma dostęp do trzech funkcji systemowych: standardowe wejście (standard input - stdin), standardowe wyjście (standard output - stdout), standardowe wyjście diagnostyczne (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 2> . Standardowe wejście przeadresowujemy znakiem < . Proszę prześledzić poniższe polecenia:
ls > lista
cat plik1 > plik2
man ls > pomoc
wc < lista
cal 2003 > tenrok
Pierwsze polecenie spowoduje zapisanie w pliku lista nazw plików i katalogów z katalogu bieżącego. Polecenie drugie spowoduje zapisanie zawartości pliku plik1 do pliku plik2. Trzecie polecenie spowoduje umieszczenie wyniku polecenia man ls w pliku pomoc, tzn. umieszczenie pomocy do polecenia ls w pliku pomoc. Czwarte polecenie da nam w wyniku liczbę wierszy, słów i znaków w pliku lista. W ostatnim przykładzie kalendarz wygenerowany poleceniem cal zostanie zapisany w pliku o nazwie tenrok.
Shell (powłoka) ustawia przeadresowanie przed uruchomieniem polecenia, po czym usuwa znaki przeadresowania z polecenia tak, że samo polecenie ich nie widzi. Trzy poniższe polecenia są równoważne:
cal 2002
> tenrok
cal >
tenrok 2002
> tenrok cal 2002
> jest skrótem od 1> , stąd następujące dwa polecenia są równoważne:
cal 2002
> tenrok
cal 2002
1> tenrok
Przy stosowaniu operatora > pierwotna zawartość plików docelowych ( np. lista, plik2, pomoc) zostanie skasowana. Jeżeli nie chcemy utracić pierwotnej zawartości pliku docelowego używamy operatora dopisywania >> . Np. polecenie man cd >> pomoc spowoduje dopisanie do pliku pomoc objaśnienia polecenia cd. Proszę prześledzić poniższy przykład:
ls > lista prześlij wynik polecenia ls do pliku lista
whoami >> lista dopisz dane o użytkowniku do pliku lista
wc < lista > wc_lista zlicz wiersze, słowa i znaki w pliku lista i umieść wynik w pliku wc_lista
Komunikaty o błędach można zapisywać niezależnie od standardowego wyjścia używając operatora 2>
polecenie 2> polecenie.bledy
polecenie > log 2> bledy
polecenie 2> bledy >log
polecenie > log
W przypadku pierwszym standardowe wyjście nie zostało przeadresowane i zostanie wyprowadzone na ekran, podczas gdy ewentualne komunikaty o błędach zostaną zapisane w pliku polecenie.bledy i nie pojawią się na ekranie. W przypadku drugim standardowe wyjście zostanie przeadresowane do pliku log, a standardowe wyjście diagnostyczne do pliku bledy. Polecenie trzecie jest równoważne poleceniu drugiemu. W przypadku czwartym standardowe wyjście diagnostyczne nie zostało przeadresowane i ewentualne komunikaty o błędach zostaną wyświetlone na ekranie.
Aby zapisać standardowe wyjście i standardowe wyjście diagnostyczne w tym samym pliku należy użyć operatora przekierowania 2>&1 np.
polecenie > polecenie.wynik 2>&1
2>&1 musi być wpisane po przeadresowaniu w wierszu poleceń standardowego wyjścia. 2>&1 oznacza przeadresowanie standardowego wyjścia diagnostycznego tam, gdzie standardowe wyjście.
W systemie UNIX zastosowano system potoków umożliwiający skierowanie wyniku działania jednego programu lub polecenia na wejście innego. Służy do tego symbol | (ang. pipe):
polecenie1 | polecenie2
program1 | program2
Przykład
Sformatowanie wydruku zawartości katalogu zawierającego katalogi domowe studentów (/home/artemis/stud) za pomocą polecenia more
ls
/home/artemis/stud | more
· Utwórz plik tekstowy o nazwie plik1 i następującej treści:
#!/bin/zsh
echo ”serdecznie witamy gospodarza domu”
kiszka
· Nadaj mu prawa wykonywania poleceniem chmod a+x plik1. Teraz plik plik1 jest tak zwanym skryptem napisanym w języku powłoki. Wykonaj polecenie file plik1 aby dowiedzieć się jakiego typu jest plik plik1. Plik plik1 uruchamiamy wpisując w wierszu poleceń ./plik1. Wynikiem działania pliku plik1 jest wypisanie na standardowym wyjściu tekstu serdecznie witamy gospodarza domu oraz wysłanie na standardowe wyjście diagnostyczne komunikatu o błędzie związanego z nie zdefiniowaną instrukcją kiszka.
Korzystając z polecenia./plik1 przećwicz użycie opisanych w instrukcji operatorów przeadresowania.
· Stosując odpowiednie polecenia i przekierowania wygeneruj listę wszystkich podkatalogów i plików (oprócz ukrytych) zawartych w Twoim katalogu własnym (w innej wersji: w katalogu nadrzędnym do twojego katalogu własnego) i zapisz ją w pliku lista_plikow w twoim katalogu własnym.
· Stosując odpowiednie polecenia i przekierowania utwórz plik lista_plików_10 zawierający 10 pierwszych i 5 ostatnich wierszy pliku lista_plików.
· Przetestuj mechanizm potoków dla różnych poleceń.
Strona poprzednia Strona następna