Další Předchozí Obsah

3. Vše o přesměrování

3.1 Teorie a rychlý přehled

Jsou 3 deskriptory souborů, stdin, stdout a stderr (std=standard).

Normálně můžeš:

  1. přesměrovat stdout do souboru
  2. přesměrovat stderr do souboru
  3. přesměrovat stdout do stderr
  4. přesměrovat stderr do stdout
  5. přesměrovat stderr a stdout do souboru
  6. přesměrovat stderr a stdout do stdout
  7. přesměrovat stderr a stdout to stderr
1 'představuje' stdout a 2 stderr.

Malá poznámka k tomuto: s málo příkazy můžeš vidět zároveň stdout (který zbývá v bufferu) a stderr, který bude vypsán na obrazovku, ale smazán, jakmile zkusíš 'brouzdat' bufferem.
[stdin=stand. vstup (klávesnice), stdout=stand. výstup (obrazovka), stderr=chybový výstup (obrazovka) - v závorkách jsou nejtypičtější příklady (pozn. překladatele)]

3.2 Příklad: stdout 2 file

Toto způsobí, že výstup programu bude zapsán do souboru.

        ls -l > ls-l.txt

Zde byl vytvořen soubor nazvaný 'ls-l.txt' a bude obsahovat to, co uvidíš na obrazovce, když napíšeš příkaz 'ls -l' a provedeš ho.

3.3 Příklad: stderr 2 file

Toto způsobí, že výstup stderr programu bude zapsán do souboru.

        grep da * 2> grep-errors.txt

Zde byl vytvořen soubor nazvaný 'grep-errors.txt' a bude obsahovat to, co uvidíš ve výstupu stderr z příkazu 'grep da *'.

3.4 Příklad: stdout 2 stderr

Toto způsobí, že výstup stderr programu půjde do stejného deskriptoru souboru jako stdout.

        grep da * 1>&2

Zde je stdout část příkazu poslána do stderr, můžeš si to učinit různými způsoby.

3.5 Příklad: stderr 2 stdout

Toto způsobí, že výstup stderr programu půjde do stejného deskriptoru souboru jako stdout.

        grep * 2>&1

Zde je stderr část příkazu poslána do stdout, jestliže pošleš rouru do less, uvidíš, že řádky, které normálně 'zmizí' (jak jsou zapisovány na stderr), jsou právě uchovávány (protože jsou na stdout).

3.6 Příklad: stderr a stdout 2 file

Toto umístí každý výstup programu do souboru. To je občas vhodné pro vstupy cronu, jestli chceš, aby příkaz prošel v naprostém pokoji (bez hlášek na obrazovku).

        rm -f $(find / -name core) &> /dev/null

Toto (myšleno při vstupu cronu) smaže každý soubor nazvaný 'core' v jakémkoliv adresáři. Všimni si, že by sis měl být úplně jistý, co příkaz dělá, jestli hodláš, aby nevypisoval zprávy na výstup.
Další Předchozí Obsah