Terminaalin perjantai: Standard Stream

Tervetuloa toiseen perjantaiin ...

On aika tutustua pieneen osaan terminaalista. Paljon harkittuani päätin luoda viestin aiheesta vakiovirrat; Vaikka se tulee olemaan pinnallinen, mielestäni jokaisen tulisi tietää.

Vakiovirta

Vakiovirta Se koostuu useista viestintäkanavista käyttäjän ja päätelaitteen välillä. Nämä Input / Output-kanavat näyttävät tai sieppaavat tietoja, kun komento suoritetaan.

Nopea kaavio vakiovirroista.

Nopea kaavio vakiovirroista.

3 I / O-liitäntää ovat: stdin Normaali tulo, stdout Vakiolähtö, stderr Vakiovirhe.

stdin: Vakiotulo

Vakiotulo on tapa, jolla kaapataan tietoja komennosta joko putkien, uudelleenohjauksen, näppäimistön jne. Kautta. Tunnistamme sen tiedostokuvaimella 0.

Kuvaaja on indikaattori tulo- ja lähtökanavien käyttämiseen. Nämä ovat int-arvoja, yleensä 0, 1 ja 2.

Esimerkki stdinistä olisi:

lajittele <listaus

Se vie kaikki luettelossa olevat tiedot - tässä tapauksessa satunnaisesti kirjoitetut numerot - ja kun uudelleenohjataan tiedostoa ls-komentoon, se lajittelee numeerisen luettelon aakkosjärjestyksessä. Tässä esimerkissä liput ovat implisiittisiä.

vakio: vakiolähtö

Tavallinen lähtö, kuten nimestään käy ilmi, näyttää komennon lähdön konsolin kautta. Jos kirjoitamme ls, kaikki tiedot, jotka se näyttää meille näytöllä, ovat vakiotulosteita. Sitä edustaa kuvaaja 1.

Yritän nyt välittää stdin ja stdout komentosarjalla, joka on kirjoitettu bashilla, yksinkertaisesti siksi, että rakastan bash hahahaa. 🙂

test.sh

#! / bin / bash jos [-t 0]; sitten kaiku "Käytät stdoutia" elif [-t 1]; sitten kaiku "Käytät stdin" muuten kaiku "Brutaali virhe" fi

Nyt kuvakaappaus, joka osoittaa komentosarjan käytön. Käytä, kun ohjaat tai käytät putkea komentosarjan kanssa testi -t tietää, suoritetaanko vain stdout-komentosarja, ja jos ei, se on selvästi stdin.

bash testi.sh ls | bash test.sh bash test.sh </ etc / passwd
Kyseinen käsikirjoitus ja sen tuotokset ...

Kyseinen skripti ja sen tuotokset ...

Muista muokata komentoa ja harjoitella niin, että opit.

stderr: Standardivirhe

Tavallinen virhe on tapa, jolla ohjelmat näyttävät virheitä tai diagnostiikkaa. Sitä edustaa kuvaaja 2.

Käsitteen ymmärtämiseksi tämä on tilanne: kun haluamme tallentaa komentovirheen, ajattelemme ensin lähdön uudelleenohjaamista pelkkään tekstiin.

ls> info.txt

Tämä toimisi, komentotiedot tallennetaan pelkkänä tekstitiedostona. Mutta virhettä tallennettaessa se ei tallenna sitä, mutta se näyttää sen näytöllä ja pelkkätekstitiedosto on tyhjä.

Sen sijaan, jos käytämme 2> osoittamaan tallentamaan stderr tiedostoon:

ls foo 2> info.txt

Nyt se tallentaa virhetiedot tekstitiedostoon.

Eniten Kuori anna stderr ja stdout tallentaa yhteen komentokomentoon &> missä Foo on olematon hakemisto

Lataukset Foo &> info.txt

Tämä tiedosto sisältää virheen tiedot suoritettaessa ls: tä Foo: ssa ja luetteloi hakemistot kohdassa Lataukset.

Ja lopuksi, mitä tuo kuuluisa on 2> & 1?

Yksinkertainen, ohjaa stderr stdout: iin. Se & keskellä> ja 1 tarkoittaa, että se ohjaa stdoutiin. Jos sitä ei olisi, se olisi jotain ... "ohjaa virhe tiedostoon 1".

Ja tämän avulla on mahdollista ohjata uudelleen:

  • stdout tiedostoon
  • stderr tiedostoon
  • vakio peräkkäin
  • stderr stdout
  • stderr ja stdout tiedostoon
  • muun muassa

Se on nykypäivän ihmisille. Luemme ja kiitämme vierailustasi. 😀


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   eliotime3000 dijo

    Mielenkiintoista. Opetusohjelmiesi ansiosta pidän Bashista paljon enemmän.

  2.   Quincy magoo dijo

    Hyvä, mielenkiintoinen, mutta sinulla on virhe seuraavalla rivillä:

    "Ja kun uudelleenohjataan tiedosto komentoon ls", sen pitäisi olla "ja kun uudelleenohjataan tiedosto lajittelukomentoon".

    Tervehdys.

  3.   Miguel dijo

    Tekstin alussa on virhe. Kun ilmoitat komennon "ls", sen on oltava "lajiteltu":
    "Ota kaikki luettelossa olevat tiedot - tässä tapauksessa satunnaisesti kirjoitetut numerot - ja ohjaa tiedosto komentoon ls (tässä se olisi lajittelu)"

    Terveisiä ja kiitoksia työn jakamisesta

  4.   tienkuljettaja dijo

    Tämä on hieno cronille, jossa haluat, että ulostulo huuhdellaan (/ dev / null), mutta virheet tallennetaan tiedostoihin. Lisäksi kun teen tämän, käytän yleensä päivämäärä -komentoa määritelläksesi tarkalleen, milloin ne epäonnistuivat.

    Bashilla (sh) on nämä Unix-filosofian niin kehittämät työkalut "tee yksi asia ja tee se hyvin"

  5.   Lolo dijo

    No en ole saanut selville mitään

    1.    Ääni dijo

      Haha, se selitetään melko hyvin, mitä et ole ymmärtänyt?