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.
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.
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
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. 😀
Įdomus. Jūsų pamokų dėka man Bashas patinka daug labiau.
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.
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
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“
Na, nieko nesu sužinojusi
Haha, tai gerai paaiškinta, ko tu nesupratai?