Terminal fredag: Standard Stream

Velkommen til nok en fredag ​​...

Det er på tide å bli kjent med en liten del av terminalen. Etter mye tanke bestemte jeg meg for å lage et innlegg om standard bekker; Selv om det vil være overfladisk, tror jeg det er noe alle burde vite.

Standard strøm

Standard strøm Den består av flere kommunikasjonskanaler mellom brukeren og terminalen. Disse inngangs- / utgangskanalene viser eller fanger informasjon når en kommando utføres.

Raskt diagram på standardstrømmer.

Raskt diagram på standardstrømmer.

De 3 I / O-tilkoblingene er: stdin Standardinngang, stdout Standard utgang, stderr Standard feil.

stdin: Standardinngang

Standard inngang er måten vi fanger informasjon fra en kommando, enten gjennom rør, omdirigering, tastatur, etc. Vi identifiserer det med filbeskrivelsen 0.

Beskrivelsen er en indikator for tilgang - i dette tilfellet - inngangs- og utgangskanalene. Dette er int-verdier, vanligvis 0, 1 og 2.

Et eksempel på stdin vil være:

sorter <oppføring

Det tar all informasjonen som er i listen - i dette tilfellet tallene som er skrevet tilfeldig - og når du omdirigerer filen til ls-kommandoen, sorterer den den numeriske listen alfabetisk. I dette eksemplet er flaggene implisitt.

stdout: Standard utgang

Standard utgang, som navnet antyder, viser utdataene fra en kommando via konsollen. Hvis vi skriver ls, er all informasjon den viser oss på skjermen standardutdata. Den er representert av deskriptor 1.

Nå skal jeg prøve å instantiere stdin og stdout med et skript skrevet i bash, rett og slett fordi jeg elsker bash hahaha. 🙂

test.sh

#! / bin / bash if [-t 0]; deretter ekko "Du bruker stdout" elif [-t 1]; deretter ekko "Du bruker stdin" ellers ekko "Brutal error" fi

Nå et skjermbilde som demonstrerer hvordan man bruker skriptet. Ved omdirigering eller bruk av et rør med skriptbruk test -t å vite om bare stdout-skriptet blir utført, og hvis ikke, er det åpenbart stdin.

bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Det aktuelle skriptet og utgangene ...

Det aktuelle skriptet og dets utganger ...

Husk å endre kommandoen og øve slik at du lærer.

stderr: Standardfeil

Standardfeil er måten programmer viser feil eller diagnostikk på. Den er representert av deskriptor 2.

For å forstå konseptet er dette situasjonen: Når vi vil lagre en kommandofeil, er det første vi tenker på å omdirigere utdata til ren tekst.

ls> info.txt

Dette fungerer, kommandoinformasjonen blir lagret i en ren tekstfil. Men når feilen er lagret, lagrer den ikke den, men den viser den på skjermen og ren tekstfil er tom.

I stedet hvis vi bruker 2> for å indikere å lagre stderr i filen:

ls foo 2> info.txt

Nå vil den lagre feilinformasjonen i tekstfilen.

De fleste av Shell la stderr og stdout lagres i en enkelt kommandokommando med &> der Foo er en ikke-eksisterende katalog

Nedlastinger Foo &> info.txt

Denne filen inneholder informasjonen om feilen når du kjører ls på Foo, og vil vise katalogene under Nedlastinger.

Og til slutt, hva gjør det berømt 2> & 1?

Enkel, omdiriger stderr til stdout. Det & midt på> og 1 betyr at det vil omdirigere til stdout. Hvis det ikke var der, ville det være noe sånt som ... "omdirigere feilen til fil 1".

Og med dette er det mulig å omdirigere:

  • stdout til en fil
  • stderr til en fil
  • stdout til stderr
  • stderr til stdout
  • stderr og stdout til en fil
  • blant annet

Det er det for i dag mennesker. Vi leser og takker for innom. 😀


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   eliotime3000. sa

    Interessant. Takket være veiledningene dine liker jeg Bash mye mer.

  2.   Quincy magoo sa

    Kjære, interessante, men du har en feil i følgende linje:

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

    En hilsen.

  3.   Miguel sa

    Det er en feil i begynnelsen av teksten. Når du indikerer kommandoen "ls", skal den være "sorter":
    «Det tar all informasjonen som er i listen - i dette tilfellet tallene som er skrevet tilfeldig - og når du omdirigerer filen til ls-kommandoen (her vil det være sortert)»

    Hilsen og takk for at du delte arbeidet ditt

  4.   roader sa

    Dette er flott for cron, hvor du vil at utdataene skal skylles (/ dev / null), men feilene skal lagres i filer. Når jeg gjør dette, bruker jeg også datokommandoen til å spesifisere nøyaktig når de mislyktes.

    Bash (sh) har disse verktøyene utviklet av Unix-filosofien "gjør en ting, og gjør det bra"

  5.   Lolo sa

    Vel, jeg har ikke funnet ut noe

    1.    Stemme sa

      Haha vel det er forklart ganske bra, hva har du ikke forstått?