Terminalni petek: standardni tok

Dobrodošli v drug petek ...

Čas je, da odkrijete majhen del terminala. Po dolgem premisleku sem se odločil, da ustvarim objavo o standardni tokovi; Čeprav bo površno, mislim, da bi to morali vedeti vsi.

Standardni tok

Standardni tok Sestavljen je iz več komunikacijskih kanalov med uporabnikom in terminalom. Ti vhodno / izhodni "kanali" prikažejo ali zajamejo informacije, ko se ukaz izvede.

Hitri diagram na standardnih tokovih.

Hitri diagram na standardnih tokovih.

3 I / O povezave so: stdin Standardni vhod, stdout Standardni izhod, stderr Standardna napaka.

stdin: standardni vhod

Standardni vnos je način, kako zajemamo informacije iz ukaza bodisi prek cevi, preusmeritve, tipkovnice itd. Identificiramo ga z deskriptorjem datoteke 0.

Deskriptor je indikator za dostop - v tem primeru - do vhodnih in izhodnih kanalov. To so vrednosti int, običajno 0, 1 in 2.

Primer stdina bi bil:

razvrsti <seznam

Zavzame vse informacije s seznama - v tem primeru naključno zapisane številke - in pri preusmeritvi datoteke v ukaz ls numerični seznam razvrsti po abecedi. V tem primeru so zastavice implicitne.

stdout: standardni izhod

Standardni izhod, kot pove že njegovo ime, prikazuje izhod ukaza prek konzole. Če napišemo, so vsi podatki, ki jih prikazuje na zaslonu, standardni izhod. Predstavlja ga deskriptor 1.

Zdaj bom poskusil ustvariti stdin in stdout s skriptom, napisanim v bash, preprosto zato, ker imam rad bash hahaha. 🙂

test.sh

#! / bin / bash, če je [-t 0]; nato echo "Uporabljate stdout" elif [-t 1]; potem echo "Uporabljate stdin" else echo "Brutal error" fi

Zdaj posnetek zaslona, ​​ki prikazuje, kako uporabljati skript. Pri preusmerjanju ali uporabi cevi z uporabo skripta test -t vedeti, ali se izvaja samo stdout skript, in če ne, je očitno stdin.

bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Zadevni skript in njegovi rezultati ...

Zadevni skript in njegovi rezultati ...

Ne pozabite spremeniti ukaza in vadbe, da se boste naučili.

stderr: Standardna napaka

Standardna napaka je način, kako programi prikažejo napake ali diagnostiko. Predstavlja ga deskriptor 2.

Za razumevanje koncepta je takšna situacija: ko želimo iz ukaza shraniti napako, najprej pomislimo, da izhod preusmerimo v navadno besedilo.

ls> info.txt

To bi delovalo, podatki o ukazu bodo shranjeni v navadni besedilni datoteki. Ko pa napake shrani, je ne shrani, temveč jo prikaže na zaslonu in navadna besedilna datoteka je prazna.

Namesto tega, če uporabimo 2> za označevanje shranitve stderr v datoteko:

ls foo 2> info.txt

Zdaj bo podatke o napaki shranil v besedilno datoteko.

Večina Shell dovolite, da se stderr in stdout shranita v enem ukaznem ukazu z &> kjer Foo ne obstaja

ls Downloads Foo &> info.txt

Ta datoteka bo vsebovala informacije o napaki pri izvajanju ls v Foo in bo imenike našla v razdelku Prenosi.

In končno, kaj pomeni ta slavni 2> & 1?

Preprosto, preusmerite stderr v stdout. To & sredi> in 1 pomeni, da bo preusmeril na stdout. Če ga ne bi bilo, bi bilo približno tako ... "preusmerite napako v datoteko 1".

In s tem je mogoče preusmeriti:

  • stdout v datoteko
  • stderr v datoteko
  • stdout do stderr
  • stderr v stdout
  • stderr in stdout v datoteko
  • med drugim

To je to za današnje ljudi. Beremo in se vam zahvaljujemo, da ste se ustavili. 😀


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   eliotime3000 je dejal

    Zanimivo. Zahvaljujoč vašim vadnicam mi je Bash veliko bolj všeč.

  2.   Quincy magoo je dejal

    Spoštovani, zanimivo, vendar imate napako v naslednji vrstici:

    "In pri preusmerjanju datoteke na ukaz ls", mora biti "in pri preusmerjanju datoteke na ukaz za razvrščanje".

    Pozdrav.

  3.   Miguel je dejal

    Na začetku besedila je napaka. Ko navedete ukaz "ls", mora biti "razvrsti":
    "Vzemite vse informacije s seznama - v tem primeru naključno zapisane številke - in datoteko preusmerite v ukaz ls (tukaj bi bilo razvrščanje)"

    Lep pozdrav in hvala, ker ste delili svoje delo

  4.   cestnik je dejal

    To je super za cron, kjer želite, da se izhod izbriše (/ dev / null), vendar se napake shranijo v datoteke. Ko to storim, običajno z ukazom datum natančno določim, kdaj niso uspeli.

    Bash (sh) ima ta orodja, ki jih je razvila filozofija Unix, "naredi eno stvar in to dobro"

  5.   Lolo je dejal

    No, nisem ničesar izvedel

    1.    Glas je dejal

      Haha no dobro je razloženo, česa niste razumeli?