Přesměrování

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
The standard streams for input, output, and error

Přesměrování je v informatice funkce společná většině interpretů pro příkazový řádek. Využívá se zejména v unixových shellech, kde je přesměrování standardních proudů běžně využíváno. Přesměrování je možné použít též v interpretu příkazového řádku pro DOS (COMMAND.COM) a Windows NT (cmd.exe), i když v nich přesměrování nefunguje univerzálně a ve všech případech.

V unixových systémech provádí programátor přesměrování pomocí systémové volání dup2() nebo vyšších funkcí ze standardní knihovny jazyka C (funkce popen(3) a freopen(3) pro práci se standardními proudy).

Přesměrovávání standardního vstupu a standardního výstupu[editovat | editovat zdroj]

Přesměrování je obvykle realizováno umístěním určitého znaku před příkazy. Typická syntaxe těchto znaků je:

příkaz1 > soubor1

provede příkaz1 a umístí výstup do soubor1. Výstupní data nahradí existující data v soubor1.

Pro přidání výstupu na konec souboru použijte >> operátor:

příkaz1 >> soubor1
příkaz1 < soubor1

provede příkaz1, standardní vstup je čten z existujícího souboru.

příkaz1 < vstupní soubor > vystupní soubor

kombinace dvou možností: příkaz1 čte ze vstupního souboru a ukládá do výstupního souboru.

Přesměrování z a do standardního souboru pomocí deskriptorů[editovat | editovat zdroj]

V Unixových shellech (většinou v Bourne shellech), mohou být první dvě akce také modifikovány umístěním čísla (file descriptor) přímo před znak. To určí, který proud je použitý pro přesměrování. Unixové standardní I/O proudy jsou:

Deskriptor Název Popis
0 stdin Standardní vstup
1 stdout Standardní výstup
2 stderr Standardní chyba

Například:

příkaz1 2> soubor1

provede příkaz1 a přesměruje stderr proud do souboru1.

V shellech odvozených od csh (the C shell) lze použít & znak místo přesměrovacích znaků s podobným výsledkem.

Další možnost aplikace je přesměrování jednoho standardního souboru do druhého. Nejznámější varianta je vložení stderr do stdout. Chybové zprávy tak mohou být zpracovány společně se standardním výstupem (nebo namísto výstupu). Například:

find / -name .profile > výsledek 2>&1

se pokusí najít všechny soubory nazvané .profile. Toto se provede bez přesměrování a uloží výstup do stdout a chybu do stderr. Jestliže je stdout nasměrován do souboru “výsledek”, objeví se chybová zpráva na konzoli. Jestliže chceme mít výstup i chybovou zprávu v souboru “výsledek”, sloučíme stderr (deskriptor 2) s stdout (deskriptor 1) použitím 2>&1.

Jestliže je vložený výstup připojen (rourován) do jiného programu, musí sekvenci 2>&1 předcházet symbol roury. Takto:

find / -name .profile 2>&1 | less

Zjednodušená forma příkazu:

příkaz > soubor 2>&1

je (není k dispozici v Bourne Shell před verzí 4):

příkaz &>soubor

nebo:

příkaz >&soubor

Externí odkazy[editovat | editovat zdroj]