Přesměrování
Author
Albert FloresThe 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
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
provede příkaz1, standardní vstup je čten z existujícího souboru.
$ příkaz1 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ů
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í. +more 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. +more 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. +more 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
[url=http://www. linfo. +moreorg/redirection. html]Redirection Definition[/url] by The Linux Information Project (LINFO) * [url=http://tldp. org/LDP/abs/html/io-redirection. html]I/O Redirection[/url] in [url=http://tldp. org/]The Linux Documentation Project[/url] * [url=http://technet. microsoft. com/en-us/library/bb490982(en-us). aspx]Redirection in Windows[/url] * [url=http://msdn. microsoft. com/en-us/library/ms682499(VS. 85). aspx]Creating a Child Process with Redirected Input and Output[/url] in Windows.
Kategorie:DOS Kategorie:Skriptovací jazyky Kategorie:Software pro Unix Kategorie:Unix