Katsotaanpa toinen esimerkki. Annetaan seuraavat kaksi komentoa: ensimmäinen (ls
) on kelvollinen komento, kun taas toinen (ls -0
) on virheellinen komento, koska se sisältää laittoman vaihtoehdon -0
.
Tämä on kelvollinen komento:
$ ls
Applications Documents Library Music Public$ echo $?
0
Katsotaan nyt virheellistä komentoa:
$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1
Toisen komentosarjan ongelmana on se, että se näyttää mahdolliset virheilmoitukset kohtaan STDERR
. Meidän skripteissämme haluamme kuitenkin tukahduttaa virheilmoitukset. Onneksi on olemassa hakkerointi, jolla saamme tehtyä juuri sen, mitä haluamme.
Kokeillaanpa tätä uudestaan komennolla > /dev/null 2>&1
:
$ ls -0 > /dev/null 2>&1
$ echo $?
1
Huomaa tällä kertaa, että virheilmoituksia ei näkynyt. Hajottaaksemme tämän, tukahdutamme komennon ls -0
virhetulosteen (stderr
), ohjaamme sen uudelleen vakiotulosteeseen (stdout
), kirjoitamme sen /dev/null
:een ja siten hävitämme sen välittömästi. Symboli >&
on operaattori, joka kopioi ensimmäisen tiedoston kuvaajan (2) ulostulon ja ohjaa sen toisen tiedoston kuvaajan (1) ulostuloon.
Katsotaan nyt, mitä numerot 2>&1
merkitsevät tarkastelemalla tätä taulukkoa File Descriptors.
Voidaan todentaa tämä antamalla ulostulo tavalliseen tiedostoon /dev/null
:n sijaan.
$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls