Při přesměrování výstupu příkazu do souboru nebo jeho propojení s jiným příkazem si můžete všimnout, že se na obrazovce vytisknou chybové zprávy.
V Bash a dalších linuxových shellech, když je program spuštěn, používá tři standardní I/O proudy. Každý proud je reprezentován číselným deskriptorem souboru:
0-stdin, standardní vstupní proud.1-stdout, standardní výstupní proud.2-stderr, standardní proud chyb.
Deskriptor souboru je pouze číslo představující otevřený soubor.
Vstupní proud poskytuje informace programu, obvykle psaním na klávesnici.
Výstup programu jde do standardního vstupního toku a chybové zprávy jdou do standardního chybového toku. Ve výchozím nastavení se na obrazovce tisknou jak vstupní, tak chybové proudy.
Výstup přesměrování #
Přesměrování je způsob, jak zachytit výstup z programu a odeslat jej jako vstup do jiného programu nebo souboru.
Streamy lze přesměrovat pomocí n> operátor, kde n je číslo deskriptoru souboru.
Když n je vynechán, výchozí je 1 , standardní výstupní proud. Například následující dva příkazy jsou stejné; oba přesměrují výstup příkazu (stdout ) do souboru.
command > file command 1> file
Chcete-li přesměrovat standardní chybu (stderr ) použijte 2> operátor:
command 2> file
Můžete napsat oba stderr a stdout do dvou samostatných souborů:
command 2> error.txt 1> output.txt
Chcete-li potlačit zobrazování chybových zpráv na obrazovce, přesměrujte stderr na /dev/null :
command 2> /dev/null Přesměrování stderr na stdout #
Při ukládání výstupu programu do souboru je zcela běžné přesměrovat stderr na stdout takže můžete mít vše v jednom souboru.
Chcete-li přesměrovat stderr na stdout a nechat si zasílat chybové zprávy do stejného souboru jako standardní výstup, použijte následující:
command > file 2>&1
> file přesměrovat stdout do file a 2>&1 přesměrovat stderr do aktuálního umístění stdout .
Důležité je pořadí přesměrování. Například následující příklad přesměrovává pouze stdout do file . K tomu dochází, protože stderr je přesměrován na stdout před stdout byl přesměrován do file .
command 2>&1 > file
Další způsob přesměrování stderr na stdout je použít &> postavit. V Bash &> má stejný význam jako 2>&1 :
command &> file Závěr č.
Pochopení konceptu přesměrování a deskriptorů souborů je velmi důležité při práci na příkazovém řádku.
Chcete-li přesměrovat stderr a stdout , použijte 2>&1 nebo &> konstrukty.
Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.