GNU/Linux >> Znalost Linux >  >> Linux

Jak přesměrovat stderr na stdout v Bash

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


Linux
  1. Jak přesměrovat pouze Stderr?

  2. Jak analyzovat soubor CSV v Bash?

  3. Jak zkontrolovat syslog v Bash na Linuxu?

  1. Přesměrujte veškerý výstup do souboru v Bash

  2. Jak zkontrolovat, zda je soubor prázdný v Bash?

  3. Jak přesměrovat výstup system() do souboru?

  1. Jak přesměrovat výstup služby systemd do souboru

  2. Jak grepovat část souboru v bash shellu

  3. bash:přesměrování stderr do souboru a stdout + stderr na obrazovku