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ář.