Nézzünk egy másik példát. Adott a következő két parancs: az első (ls) egy érvényes parancs, míg a második (ls -0) egy érvénytelen parancs, mert tartalmaz egy illegális opciót -0.

Ez egy érvényes parancs:

$ ls
Applications Documents Library Music Public$ echo $?
0

Most nézzük az érvénytelen parancsot:

$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1

A második szkripttel az a probléma, hogy a STDERR-be minden hibaüzenetet megjelenít. A mi szkriptjeink esetében azonban el akarjuk nyomni a hibaüzeneteket. Szerencsére van egy hack, amivel pontosan azt érhetjük el, amit szeretnénk.

Próbáljuk meg újra a > /dev/null 2>&1-vel:

$ ls -0 > /dev/null 2>&1
$ echo $?
1

Ezúttal vegyük észre, hogy nem láttunk hibaüzenetet. Hogy ezt lebontjuk, elnyomjuk a ls -0 parancs hibakimenetét (stderr), átirányítjuk a standard kimenetre (stdout), a /dev/null-be írjuk, ezáltal azonnal eldobjuk. A >& szimbólum egy olyan operátor, amely az első fájlleíró (2) kimenetét másolja, és átirányítja a második fájlleíró (1) kimenetére.

Most nézzük meg, mit jelentenek a 2>&1-ben lévő számok, ha megnézzük ezt a Fájlleírók táblázatát.

Ezt úgy tudjuk ellenőrizni, hogy a /dev/null helyett egy normál fájlba adunk ki.

$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.