Przyjrzyjrzyjmy się innemu przykładowi. Biorąc pod uwagę następujące dwa polecenia: pierwsze (ls) jest prawidłowym poleceniem, podczas gdy drugie (ls -0) jest nieprawidłowym poleceniem, ponieważ zawiera nielegalną opcję -0.

To jest prawidłowe polecenie:

$ ls
Applications Documents Library Music Public$ echo $?
0

Teraz spójrzmy na nieprawidłowe polecenie:

$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1

Problem z drugim skryptem polega na tym, że wyświetla on wszelkie komunikaty o błędach w STDERR. Jednak w przypadku naszych skryptów, chcemy wyłączyć komunikaty o błędach. Na szczęście istnieje hack, który robi dokładnie to, co chcemy.

Spróbujmy tego ponownie z > /dev/null 2>&1:

$ ls -0 > /dev/null 2>&1
$ echo $?
1

Zauważmy tym razem, że nie zobaczyliśmy żadnych komunikatów o błędach. Aby to rozłożyć na czynniki pierwsze, tłumimy wyjście błędu (stderr) polecenia ls -0, przekierowujemy je na standardowe wyjście (stdout), zapisujemy je do /dev/null, a tym samym natychmiast je wyrzucamy. Symbol >& jest operatorem, który kopiuje wyjście pierwszego deskryptora pliku (2) i przekierowuje na wyjście drugiego deskryptora pliku (1).

Teraz zobaczmy, co reprezentują liczby w 2>&1, patrząc na ten wykres deskryptorów plików.

Możemy to zweryfikować, zapisując dane wyjściowe do zwykłego pliku zamiast /dev/null.

$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.