Hogyan lehet átirányítani a stderr -t a stdout -ra a Bash -ban

How Redirect Stderr Stdout Bash



A Linuxban a parancsok némi bemenetet vesznek fel a felhasználótól, ami lehet fájl vagy bármilyen attribútum, és végrehajtáskor valamilyen kimenetet adnak, amelyet szabványos kimenetnek neveznek. A standard kimenet lehet sikeres kimenet vagy hibakimenet; mindkettő megjelenik a terminál képernyőjén. De bizonyos esetekben a szabványos kimeneteket egy fájlba szeretné tárolni a kód tesztelése vagy hibakeresése céljából. Linuxban ezek a kimenetek átirányíthatók egy fájlba, és a rögzítés folyamatát átirányításnak nevezik.





A Linux minden folyamata három adatfolyamot állít elő, stdin, stdout és stderr:



  • stdin : A felhasználótól billentyűzeten keresztül fogad be adatokat
  • stdout : A kimenetet jeleníti meg a képernyőn
  • stderr : Hibaadatokat jelenít meg a képernyőn

Minden adatfolyamnak van numerikus azonosítója:



Numerikus azonosító Név
0 stdin
1 stdout
2 stderr

Magyarázzuk el egy kicsit részletesebben az átirányítást:





A standard kimenet és a standard hiba átirányítása a Bash -ben:

A parancs szabványos kimenetének átirányításához az 1 -et fogjuk használni a> jelnél nagyobb átirányítási operátorral:

$ls 1>stdout.txt

A fenti parancs létrehoz egy fájlt, és elhelyezi az ls parancs szabványos kimenetét az stdout.txt fájlban.



Az stdout.txt fájl olvasásához használja:

$macskastdout.txt

A szabványos hibát fájlba is átirányíthatjuk a következő paranccsal:

$macskamyfile.txt2>stderr.txt

Az stderr.txt fájl megtekintéséhez használja:

$macskastderr.txt

Győződjön meg arról, hogy a 2 használata nagyobb, mint a> jel. Mivel a könyvtárban nincs myfile.txt fájl, a cat parancs hibát ad, amely hozzáfűződik az stderr.txt fájlhoz.

Ezeket a szabványos kimeneteket egyetlen paranccsal is át lehet irányítani, használja:

$ls 1>stdout.txt2>stderr.txt

Az ls parancs kimenete a stdout.txt fájl, de a stderr.txt üres marad, mert nem lesz hiba.

Most tegyük meg a stderr.txt fájlt:

$macskamyfile.txt1>stdout.txt2>stderr.txt

Az alábbi paranccsal olvassa el a stderr.txt fájlt.

$macskastderr.txt

És természetesen az stdout.txt üres lesz.

Következtetés :

A Linux parancs végrehajtásakor szabványos kimenetet ad, amely lehet sikeres vagy hibakimenet. Általában ezeket a kimeneteket nem lehet átirányítani az átirányítási operátorok segítségével; a> jellel meghatározott numerikus azonosítókat kell használnunk. Ebben az útmutatóban megtanultuk, hogyan lehet ezekkel a számgombokkal a szabványos kimenetet egy példákkal ellátott fájlba átirányítani.