Terminalo penktadienis: standartinis srautas

Sveiki atvykę į kitą penktadienį ...

Laikas pažinti mažytę terminalo dalį. Po ilgų svarstymų nusprendžiau sukurti įrašą apie standartiniai srautai; Nors tai bus paviršutiniška, manau, kad tai turėtų žinoti visi.

Standartinis srautas

Standartinis srautas Jį sudaro keli ryšio kanalai tarp vartotojo ir terminalo. Šie įvesties / išvesties „kanalai“ rodo arba fiksuoja informaciją, kai vykdoma komanda.

Greita standartinių srautų schema.

Greita standartinių srautų schema.

3 įvesties / išvesties jungtys yra: stdin Standartinė įvestis, stdout Standartinė išvestis, stderr Standartinė klaida.

stdin: standartinė įvestis

Standartinis įvestis yra būdas, kuriuo mes užfiksuojame informaciją iš komandos vamzdžiais, peradresavimu, klaviatūra ir kt. Mes jį identifikuojame su failo deskriptoriumi 0.

Apibūdinimas yra įėjimo ir išvesties kanalų prieigos rodiklis. Tai yra int vertės, paprastai 0, 1 ir 2.

Stdin pavyzdys būtų:

rūšiuoti <sąrašas

Tam reikia visos sąraše esančios informacijos - šiuo atveju atsitiktinai parašytų skaičių - ir, peradresuojant failą į komandą ls, jis surūšiuoja skaičių sąrašą abėcėlės tvarka. Šiame pavyzdyje vėliavos yra netiesioginės.

standartinis: standartinė išvestis

Standartinis išėjimas, kaip rodo jo pavadinimas, rodo komandos išvestį per konsolę. Jei parašysime, visa informacija, kurią mums rodo ekrane, yra standartinė išvestis. Ją vaizduoja 1 deskriptorius.

Dabar pabandysiu instinktuoti „stdin“ ir „stdout“ scenarijais, parašytu bash, paprasčiausiai todėl, kad man patinka bash hahaha. 🙂

testas.sh

#! / bin / bash jei [-t 0]; tada aidi „Tu naudoji stdout“ elif [-t 1]; tada aidite „Jūs naudojate„ stdin ““, o kitu atveju - „Brutali klaida“

Dabar ekrano kopija, parodanti, kaip naudoti scenarijų. Peradresuodami arba naudodami vamzdį naudokite scenarijų bandymas -t žinoti, ar vykdomas tik „stdout“ scenarijus, o jei ne, tai akivaizdžiai yra „stdin“.

bash testas.sh ls | bash test.sh bash test.sh </ etc / passwd
Aptariamas scenarijus ir jo išvestys ...

Aptariamas scenarijus ir jo išvestys ...

Nepamirškite modifikuoti komandos ir praktikuoti, kad išmoktumėte.

stderr: standartinė klaida

Standartinė klaida yra tai, kaip programos rodo klaidas ar diagnostiką. Ją vaizduoja 2 deskriptorius.

Norint suprasti sąvoką, yra tokia situacija: kai norime išsaugoti klaidą iš komandos, pirmiausia galvojame apie išvesties nukreipimą į paprastą tekstą.

ls> info.txt

Tai veiktų, komandos informacija bus saugoma paprasto teksto faile. Tačiau išsaugant klaidą ji jos nesaugo, bet parodo ekrane, o paprasto teksto failas tuščias.

Vietoj to, jei naudosime 2>, norėdami pažymėti failą stderr:

ls foo 2> info.txt

Dabar ji išsaugos klaidos informaciją teksto faile.

Labiausiai apvalkalas leisti „stderr“ ir „stdout“ išsaugoti vienoje komandos komandoje su &>, kur „Foo“ yra neegzistuojantis katalogas

Parsisiuntimai Foo &> info.txt

Šiame faile bus informacija apie klaidą vykdant „ls“ „Foo“, o katalogai bus pateikti skiltyje „Atsisiuntimai“.

Ir pagaliau, ką tas garsus daro 2> ir 1?

Paprasta, peradresuoti stderr į stdout. Tai & viduryje> ir 1 reiškia, kad jis peradresuos į stdout. Jei jo nebūtų, tai būtų kažkas panašaus į ... "klaidą nukreipkite į 1 failą".

Ir tai galima nukreipti:

  • stdout į failą
  • stderr į failą
  • stdout į stderr
  • stderr iki stdout
  • stderr ir stdout į failą
  • tarp kitų

Tai šiandien žmonėms. Skaitėme ir dėkojame, kad užsukote. 😀


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

  1.   3000 sakė

    Įdomus. Jūsų pamokų dėka man Bashas patinka daug labiau.

  2.   Quincy magoo sakė

    Gerbiamas, įdomu, tačiau šioje klaidoje yra klaida:

    "Ir peradresuojant failą į komandą ls", ji turėtų būti "ir peradresuojant failą į rūšiavimo komandą".

    Pasisveikinimas.

  3.   miguel sakė

    Teksto pradžioje yra klaida, kai nurodote komandą „ls“, ji turėtų būti „rūšiuoti“:
    "Paimkite visą informaciją, kuri yra sąraše - šiuo atveju atsitiktinai parašytus skaičius - ir peradresuokite failą į komandą ls (čia tai būtų rūšiavimas)"

    Sveikinimai ir ačiū, kad dalinatės savo darbu

  4.   kelininkas sakė

    Tai puikiai tinka „cron“, kur norite, kad išvestis būtų išvalyta (/ dev / null), bet klaidos būtų saugomos failuose. Be to, kai tai darau, paprastai naudoju komandą „data“, kad tiksliai nurodyčiau, kada nepavyko.

    Bashas (sh) turi šias „Unix“ filosofijos sukurtas priemones „padaryk vieną ir gerai padaryk“

  5.   Lolo sakė

    Na, nieko nesu sužinojusi

    1.    Balsas sakė

      Haha, tai gerai paaiškinta, ko tu nesupratai?