File Descriptor of Shell Script

Intro

Joskus näemme tällaisia komentoja komentotulkissa:

  • $ ls foo > /dev/null 2>&1

Saattaa olla vaikea ymmärtää, mitä tämä tekee ensimmäistä kertaa, joten tässä huomautuksessa selitetään se lyhyesti.

I/O Redirection

Esitellään, että sinulla on nyt yksinkertainen tekstitiedosto:

Ayksinkertainen tekstitiedosto.

Siirrä nyt tämän tiedoston sisältö toiseen paikkaan:

Ohjoita tiedoston sisältö.

Yllä olevassa uudelleenohjaustoiminnossa emme näe terminaalissa näkyvää tulostetta, koska komento > ohjaa test.txt:n sisällön osoitteeseenoutput.txt, joka on vakiotuloste (stdout).

Vakiolähdön vastakohtana on vakiovirhe (stdr), esim.

Virhe ilmeni aikana.6082>Uudelleenohjausprosessin aikana tapahtui virhe.

Uudelleenohjausprosessin aikana tapahtui virhe, koska nykyisessä hakemistossa ei ole tiedostoa nimeltä no_such_file.txt. Tässä tapauksessa, vaikka komentoa > käytetäänkin, ei ole mahdollista syöttää sisältöä output.txt-tiedostoon, koska stdout-tiedostoa ei ole, vaan sen sijaan stderror-virheilmoitus.

Tiedoston kuvaaja

Tiedoston kuvaajaa voidaan ajatella positiivisena kokonaislukuna avoimelle tiedostolle. Jos sinulla on 100 avointa tiedostoa, sinulla on periaatteessa 100 vastaavaa tiedostokuvaajaa.

Unix/Unixin kaltaisissa järjestelmissä on myös tiedostokuvaajia, jotka on omistettu stdoutille ja stderrille.näille tulostuskohteille:

  • 1: for stdout
  • 2: for stderr

Kaikki yhdessä

Ylläolevan konseptin mukaan, jos haluat kirjoittaa tunnetun tiedoston sisällön johonkin toiseen tiedostoon, voit tehdä näin

Ohjata tiedoston sisältö toiseen paikkaan kautta.stdout.

Tällä puolella oleva 1 edustaa stdoutia, jonka syntaksi esitetään:

  • >

Joten kun näet jonkun kirjoittavan from.foo > to.bar, se vain jättää pois kohdan

Niin ikään, stderr:n ohjaamiseksi voit tehdä näin:

Ohjata virheilmoitus toiseen paikkaan stderr:n kautta.

Jos haluat ohjata sekä stdout- että stderr-virheilmoitukset samaan määränpäähän, voit ohjata ne seuraavasti

Ohjaa stderr samaan paikkaan kuin stdout.
  • &1 käytetään viittauksena tiedoston kuvaajan id:hen 1 eli viittauksena stdoutiin.
  • 2>&1 tarkoittaa stderrin sisällön ohjaamista stdoutiin.

Summary

  • Tulosteella on yleensä kaksi kohdetta: stdout ja stderr.
  • Voidaan ohjata tuloste eri paikkoihin, mutta yleensä tiedostoon.
  • Tiedoston kuvaajaa voidaan käyttää erottamaan stdout (1) ja stderr (2).
  • komento > output_location on itse asiassa lyhenne komennosta 1> output_location.
  • Voimme käyttää & viittaamaan muihin tiedoston kuvaajiin.

Vastaa

Sähköpostiosoitettasi ei julkaista.