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