Mitä ovat stdin, stderr ja stdout Bashissa

What Are Stdin Stderr



Aina kun suoritat komentoa päätelaitteessa, stdin , stderr ja stdout ovat kolme datavirtaa, jotka bash luo. Jos olet tutustunut komentoriviin, olet ehkä jo käyttänyt näitä ominaisuuksia. Pohjimmiltaan ne mahdollistavat tietojen siirtämisen/uudelleenohjaamisen yhdestä komennosta toiseen.

Katsotaanpa kuinka stdin , stderr ja stdout toimii ja miten voit myös käyttää niitä.







stdin, stdout ja stderr

Laskennassa termi stream viittaa johonkin, joka voi siirtää dataa. Tässä kaikissa kolmessa virtassa on tekstiä datana.



Samoin kuin vesivirtoja, tietovirroilla on myös kaksi päätepistettä. On lähde ja ulosvirtaus. Mikä tahansa komento, jota suoritat päätelaitteessa, on streamin kummassakin kohdassa. Striimin avulla voit yhdistää kaksi pääteikkunaa, kaksi eri komentoa ja jopa tiedostoja!



Tarkastellaanpa erikoisvirtoja nopeasti.





  • stdin: Vakiotulo. Se käyttää tekstiä syöttönä.
  • stdout: Vakiolähtö. Komennon tekstilähtö tallennetaan stdout -virtaan.
  • stderr: tarkoittaa standardivirhettä. Aina kun komento kohtaa virheen, virhesanoma tallennetaan tähän virtaan.

Linuxissa lähes kaikkia virtoja käsitellään ikään kuin ne olisivat tiedostoja. Aivan kuten voit lukea/kirjoittaa tiedoston, voit lukea/kirjoittaa tietoja näistä virroista.

Helppo tapa käyttää mitä tahansa tiedostoa on käyttää siihen liittyvää ainutlaatuista tiedostonkuvausnumeroa. Näiden virtojen tapauksessa kullekin niistä on annettu yksilöllisiä arvoja.



  • 0: stdin
  • 1: vakio
  • 2: stderr

stdin, stdout ja stderr toiminnassa

Aloitetaan oppimalla lisää näistä virroista toiminnan kautta, aloitamme stdinillä.

Suorita seuraava komento.

$lukea

Komento vaatii näppäimistön syötteen. Tässä lukutyökalu saa panoksen stdin: ltä. Katsotaan nyt stdoutia.

Suorita komento ensin.

$ls -he

Tässä ls -komento luettelee nykyisen hakemiston tiedostot. Lista lähetetään osoitteeseen stdout ja pääte tulostaa sen. Tarkistetaan nyt stderr.

Virhe voi tapahtua eri tavoin. Tässä esimerkissä virheellisen argumentin lähettäminen johtaa virheeseen.

$ls -hemitä tahansa

Tässä ei ole mitään tiedostoa nimeltä. Siksi palautusviesti lähetetään osoitteeseen stderr .

Putkisto

Tämä on yleinen tekniikka, joka hyödyntää täysimääräisesti stdin- ja stdout -virtoja. Selitetään se esimerkillä.

$heitti pois 'Hei maailma' | pitoHei

Tässä | merkki vastaa putkistosta. Lähtö heitti pois luo on kirjoitettu stdout stream. Sitten putkisto ohjaa stdout -sisällön stdin: lle grep -komentoa varten. Näin grep tietää, millä sisällöllä toiminto suoritetaan.

Jos haluat ohjata sekä stderr että stdout seuraavaan komentoon, käytä | & sen sijaan.

$heitti poisHei maailma| & kissa

$mitä tahansa| & kissa

Virtojen uudelleenohjaus

Nyt tiedämme, miten nämä virrat toimivat, katsotaanpa, miten voit ohjata ne uudelleen. Putkisto on eräänlainen uudelleenohjaus. Se sisältää kuitenkin vain stdin ja stdout. Bash sallii kaikkien kolmen virran erityisen hallinnan.

Jos haluat ohjata stdout -sisällön tiedostoon, lisää> kulma ja kohdetiedoston nimi.

$heitti poisHei maailma>hello.txt

Tässä echo -komennon tulos tallennetaan hello.txt -tiedostoon.

Jos tiedosto on jo olemassa, yllä oleva komento korvaa sen. Vältä se varmistamalla, että tiedostonimi on yksilöllinen. Jos et halua korvata, voit käyttää sen sijaan >>. Se liittää tuloksen kohdetiedoston loppuun.

$heitti pois 'Hei maailma' >>hello.txt

Stdinin tavoite on työskennellä panoksen kanssa. Tämän voi myös ohjata uudelleen. Esimerkiksi sen sijaan, että kirjoittaisit syötteen näppäimistöltä, se voidaan ladata tiedostosta.

Tässä komennossa kissa ottaa syötteen suoraan hello.txt -tiedostosta.

$kissa <hello.txt

Tarkastellaan uudelleenohjausta eri esimerkillä. Tällä kertaa siihen liittyy Python -komentosarja.

$# pyin.py
$ nimi= tulo('Anna nimi n'')
$sähköposti = tulo('Syötä sähköposti n'')
$Tulosta('Nimesi on %s ja sähköpostiosoite on %s'%(nimi, sähköposti))

Komentosarjan syöte sijaitsee osoitteessa hello.txt.

$kissahello.txt

Lähetetään tiedosto komentosarjan syötteeksi.

$ python3 pyin.py <Hei.txt

Mielenkiintoista on, että voit ohjata molemmat stdin ja stdout samassa komentorivissä. Tässä seuraava komento käyttää hello.txt -tiedostoa muodossa stdin ja lähetä stdout komennosta tiedostoon.

$ python3 pyin.py <Hei.txt >lähtö.txt

Stderrin uudelleenohjaus on samanlainen kuin stdout. Sinun on kuitenkin mainittava kuvaus ID 2 stderr: n osoittamiseksi. Muuten se käyttää vain stdoutia.

Tässä ohjaan sisällön uudelleen stderr tekstitiedostoon.

$mitä tahansa2>error.txt

Stdoutin ja Stderrin uudelleenohjaus

Kyllä, on mahdollista ohjata molemmat samanaikaisesti. Sinun tarvitsee vain mainita kuvaus ID 1 ja 2 ennen uudelleenohjausta.

$heitti poisHei maailma1>output.log2>debug.log

Lopulliset ajatukset

stdin , stdout ja stderr ovat upeita ominaisuuksia bash tarjoaa oletusarvoisesti. Jos pidät bash -komentosarjoista, niiden käyttö voi olla uskomattoman hyödyllistä hankalissa tilanteissa.

Haluatko oppia lisää bash -komentosarjoista? Aloitetaan tästä aloittelijan opas bash -komentosarjoihin !

Nauttia!