Petr Kulhánek, Zora Střelcová a Jakub Štěpán kulhanek@chemi.muni.cz Národní centrum pro výzkum biomolekul, Masarykova univerzita, Kotlářská 2, CZ-61137 Brno C2110 Operační systém UNIX a základy programování 3. lekce C2110 Operační systém UNIX a základy programování - 2 - ObsahObsah Procesy standardní vstup a výstup, přesměrování, roury C2110 Operační systém UNIX a základy programování - 2 - Standardní proudyStandardní proudy process (příkaz, program) standardní vstupní proud (klávesnice) standardní výstupní proud (obrazovka terminálu) standardní výstupní chybový proud (obrazovka terminálu) Vstupně-výstupní proudy slouží procesu ke komunikaci se svým okolím. Každý proces otevírá tři standardní proudy: C2110 Operační systém UNIX a základy programování - 3 - PřesměrováníPřesměrování process (příkaz, program) standardní vstupní proud (klávesnice) standardní výstupní proud (obrazovka terminálu) standardní výstupní chybový proud (obrazovka terminálu) Vstupně-výstupní proudy lze přesměrovat tak, aby používaly soubory místo klávesnice či obrazovky. C2110 Operační systém UNIX a základy programování - 4 - Přesměrování vstupuPřesměrování vstupu Přesměrování standardního vstupu programu my_command ze souboru input.txt. $ my_command < input.txt Přesměrování standardního vstupu programu my_command ze souboru skriptu. ....... ./my_command << EOF prvni radka textu druha radka textu treti radka textu EOF ...... značka určující konec vstupu (volí uživatel) konec vstupu, značku nesmí obklopovat mezery text, který tvorí načítaný vstup Tento způsob přesměrování je obzvláště výhodné používat ve skriptech, nicméně funguje i v příkazové řádce. Výhodou je expanze proměnných v načítaném textu. C2110 Operační systém UNIX a základy programování - 5 - Přesměrování výstupuPřesměrování výstupu Přesměrování standardního výstupu programu my_command do souboru output.txt. (Soubor output.txt je vytvořen. Pokud již existuje, je jeho původní obsah smazán.) $ my_command > output.txt Přesměrování standardního výstupu programu my_command do souboru output.txt. (Soubor output.txt je vytvořen. Pokud již existuje, je výstup programu my_command připojen na jeho konec.) $ my_command >> output.txt Podobná pravidla platí pro standardní chybový výstup, v tomto případě se používají nasledující operátory: $ my_command 2> errors.txt $ my_command 2>> errors.txt C2110 Operační systém UNIX a základy programování - 6 - Spojování výstupních proudůSpojování výstupních proudů Standardní výstup a standardní chybový výstup programu my_command lze současně přesměrovat do souboru output.txt. $ my_command &> output.txt Výše uvedený postup nelze použít pro operátor >>. $ my_command &>> output.txt nefunguje Řešení: Nejdříve je nutné přesměrovat standardní výstup a poté spojit standardní chybový výstup s výstupem standardním. $ my_command >> output.txt 2>&1 $ my_command 2>&1 >> output.txt nefunguje pořadí je důležité! C2110 Operační systém UNIX a základy programování - 7 - Roury (pípy)Roury (pípy) Roury slouží ke spojování standardního výstupu jednoho procesu se standardním vstupem jiného procesu. process 1 process 2 vstup výstup | vstup výstup chybový výstup chybový výstup $ command_1 | command_2 Použití: C2110 Operační systém UNIX a základy programování - 8 - Roury a chybový proudRoury a chybový proud Přenos standardního chybového výstupu přes rouru je možné provést po jeho spojení se standardním výstupem. process 1 process 2 vstup výstup | vstup výstup chybový výstup chybový výstup $ command_1 2>&1 | command_2 Použití: 2>& 1 C2110 Operační systém UNIX a základy programování - 9 -