5. Přesměrování vstupu a výstupu

Standardní vstup, výstup a chybový výstup lze přesměrovat z defaultních (rozuměj výchozích) zařízení na jiné zdroje pomocí speciálních operátorů.

Chceme-li data načíst z jiného zdroje než je klávesnice, např. ze souboru, použijeme operátor "menší než" (<). Čtení dat ze souboru můžeme demonstrovat opět pomocí příkazu cat, ten načte obsah souboru a zobrazí na standardním výstupu.

 


Chceme-li data přesměrovat na jiný výstup než je monitor, např. do souboru, použijeme operátor "je větší" (>). Zápis dat do souboru můžeme demonstrovat pomocí příkazu date, ten nezobrazí výstup na monitoru, jak to obvykle dělá, ale přesměruje výstup do souboru. Pokud soubor s názvem uvedeným za operátorem neexistuje, automaticky se vytvoří.



Pozor na použití operátoru "je větší" (>). Tento typ přesměrování vždy vymaže a nahradí obsah souboru aktuálním výstupem.

 


Pokud bychom chtěli původní obsah souboru zachovat a aktuální výstup programu ke stávajícím datům v souboru přidat, použijeme operátor "dvojité je větší" (>>).



Uvedené operátory přesměrování lze v příkazové řádce shellu kombinovat. Zpracovávají se v pořadí, v jakém jsou uvedena.

 


Pokud nějakému programu předáme jako vstup data ze souboru (tedy prvním argumentem příkazu je jméno existujícího souboru), je operátor "je menší" (<) implicitní. V takových případech nemusíme operátor vůbec uvádět. Samotný operátor "je menší" (<) je okleštěnou verzí správného zápisu (0<), který přímo vyjadřuje pomocí číselné reprezentace, že se jedná o přesměrování standardního vstupu. Naposledy zmíněnou formu zápisu operátoru je možné také použít, ale všechna tři vyjádření jsou zcela ekvivalentní.



Obdobně je potřeba si uvědomit, že operátor "je větší" (>) přesmerovává pouze standardní výstup, nikoliv už standardní chybový výstup. Tedy operátor (>) je ekvivalentem ke správnému úplnému označení (1>). Naopak pokud bychom chtěli přesměrovat pouze standardní chybový výstup, musíme vždy využít jeho číselné reprezentace (2>). Oba výstupy lze tedy zpracovávat zcela odděleně.

 


Chceme-li přesměrovat standardní a standardní chybový výstup do jednoho souboru zároveň, můžeme využít operátor (&>). V takovém případě má vždy standardní chybový výstup přednost a vypíše se dříve před standardním výstupem.

 


Standardní chybový výstup můžeme také nechat přesměrovat do standardního výstupu pomocí operátoru (2>&1).

 


Pokud bychom přesměrovali standardní chybový výstup do standardního výstupu a zároveň chtěli standardní výstup přesměrovat do souboru, pak toto přesměrování musí být uvedeno přednostně.