Terminal fredag: Standard Stream

Velkommen til endnu en fredag ​​...

Det er tid til at lære en lille del af terminalen at kende. Efter meget eftertanke besluttede jeg at oprette et indlæg om standard strømme; Selvom det vil være overfladisk, tror jeg, det er noget, som alle burde vide.

Standardstrøm

Standardstrøm Den består af flere kommunikationskanaler mellem brugeren og terminalen. Disse "kanaler" til input / output viser eller fanger information, når en kommando udføres.

Hurtigt diagram over standardstrømme.

Hurtigt diagram over standardstrømme.

De 3 I / O-forbindelser er: stdin Standardindgang, stdout Standard output, stderr Standard fejl.

stdin: Standardindgang

Standard input er den måde, hvorpå vi fanger information fra en kommando, enten gennem rør, omdirigering, tastatur osv. Vi identificerer det med filbeskrivelsen 0.

Descriptoren er en indikator for adgang - i dette tilfælde - input- og outputkanalerne. Disse er int-værdier, normalt 0, 1 og 2.

Et eksempel på stdin ville være:

sorter <fortegnelse

Det tager al den information, der er på listen - i dette tilfælde de numre, der er skrevet tilfældigt - og når filen omdirigeres til kommandoen ls, sorterer den den numeriske liste alfabetisk. I dette eksempel er flagene implicitte.

stdout: Standard output

Standard output, som navnet antyder, viser output fra en kommando via konsollen. Hvis vi skriver ls, er al information, det viser os på skærmen, standardoutput. Det er repræsenteret af deskriptor 1.

Nu vil jeg prøve at instantiere stdin og stdout med et script skrevet i bash, simpelthen fordi jeg elsker bash hahaha. 🙂

test.sh

#! / bin / bash hvis [-t 0]; derefter ekko "Du bruger stdout" elif [-t 1]; derefter ekko "Du bruger stdin" ellers ekko "Brutal error" fi

Nu et skærmbillede, der viser, hvordan man bruger scriptet. Når du omdirigerer eller bruger et rør med scriptet, skal du bruge det test -t at vide, om kun stdout-scriptet udføres, og hvis ikke, er det naturligvis stdin.

bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Det pågældende script og dets output ...

Det pågældende script og dets output ...

Husk at ændre kommandoen og øve dig, så du lærer.

stderr: Standardfejl

Standardfejl er den måde, programmer viser fejl eller diagnostik på. Det er repræsenteret af deskriptor 2.

For at forstå konceptet er dette situationen: Når vi vil gemme en kommandofejl, er den første ting, vi tænker på, at omdirigere output til almindelig tekst.

ls> info.txt

Dette fungerer, kommandooplysningerne gemmes i en almindelig tekstfil. Men når du gemmer fejlen, gemmer den ikke den, men den viser den på skærmen, og almindelig tekstfil er tom.

I stedet for hvis vi bruger 2> til at angive at gemme stderr i filen:

ls foo 2> info.txt

Nu gemmer det fejloplysningerne i tekstfilen.

Mest Shell lad stderr og stdout gemmes i en enkelt kommandokommando med &> hvor Foo er et ikke-eksisterende bibliotek

ls Downloads Foo &> info.txt

Denne fil indeholder oplysningerne om fejlen ved udførelse af ls i Foo og viser mapperne under Downloads.

Og endelig, hvad gør det berømt 2> & 1?

Enkel, omdiriger stderr til stdout. Det & i midten af> og 1 betyder, at det vil omdirigere til stdout. Hvis det ikke var der, ville det være noget som ... "omdirigere fejlen til fil 1".

Og med dette er det muligt at omdirigere:

  • stdout til en fil
  • stderr til en fil
  • stdout til stderr
  • stderr til stdout
  • stderr og stdout til en fil
  • blandt andre

Det er det for i dag mennesker. Vi læser og tak, fordi du kom forbi. 😀


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   eliotime3000 sagde han

    Interessant. Takket være dine tutorials kan jeg godt lide Bash meget mere.

  2.   Quincy magoo sagde han

    Kære, interessante, men du har en fejl på følgende linje:

    "Og når du omdirigerer filen til ls-kommandoen", skal den være "og når du omdirigerer filen til sorteringskommandoen".

    En hilsen.

  3.   Miguel sagde han

    Der er en fejl i begyndelsen af ​​teksten, når du angiver kommandoen "ls", skal den være "sort":
    "Tag alle de oplysninger, der er på listen - i dette tilfælde de numre, der er skrevet tilfældigt - og omdiriger filen til kommandoen ls (her ville det være sorteret)"

    Hilsner og tak for at dele dit arbejde

  4.   roader sagde han

    Dette er fantastisk til cron, hvor du ønsker, at output skal skylles (/ dev / null), men fejlene skal gemmes i filer. Når jeg gør dette, bruger jeg normalt datokommandoen til at angive nøjagtigt, hvornår de mislykkedes.

    Bash (sh) har disse værktøjer udviklet af Unix-filosofien "gør en ting, og gør det godt"

  5.   Lolo sagde han

    Jeg har ikke fundet ud af noget

    1.    Stemme sagde han

      Haha, det forklares ret godt, hvad har du ikke forstået?