Terminal Friday: Standard Stream

Welkom op een andere vrijdag ...

Het is tijd om een ​​klein deel van de terminal te leren kennen. Na lang nadenken besloot ik een bericht te plaatsen over de standaard streams; Hoewel het oppervlakkig zal zijn, denk ik dat het iets is dat iedereen zou moeten weten.

Standaard stream

Standaard stream Het bestaat uit verschillende communicatiekanalen tussen de gebruiker en de terminal. Deze Input / Output "kanalen" tonen of vangen informatie op wanneer een commando wordt uitgevoerd.

Snel diagram over standaard streams.

Snel diagram over standaard streams.

De 3 I / O-aansluitingen zijn: stdin Standaard invoer, stdout Standaard output, stderr Standaardfout.

stdin: standaardinvoer

Standaardinvoer is de manier waarop we informatie van een commando vastleggen, hetzij via leidingen, omleiding, toetsenbord, enz. We identificeren het met de bestandsdescriptor 0.

De descriptor is een indicator om in dit geval toegang te krijgen tot de in- en uitgangskanalen. Dit zijn int-waarden, meestal 0, 1 en 2.

Een voorbeeld van stdin zou zijn:

sorteer <listing

Het neemt alle informatie die in de lijst staat - in dit geval de nummers willekeurig geschreven - en wanneer het bestand wordt omgeleid naar het ls-commando, wordt de numerieke lijst alfabetisch gesorteerd. In dit voorbeeld zijn de vlaggen impliciet.

stdout: standaarduitvoer

Standaarduitvoer toont, zoals de naam al aangeeft, de uitvoer van een commando via de console. Als we ls schrijven, is alle informatie die het ons op het scherm laat zien de standaarduitvoer. Het wordt vertegenwoordigd door descriptor 1.

Nu zal ik proberen stdin en stdout te instantiëren met een script geschreven in bash, simpelweg omdat ik van bash hou hahaha. 🙂

test.sh

#! / bin / bash if [-t 0]; echo dan "Je gebruikt stdout" elif [-t 1]; dan echo "Je gebruikt stdin" anders echo "Brute fout" fi

Nu een screenshot die laat zien hoe je het script moet gebruiken. Gebruik bij het omleiden of gebruiken van een pipe met het script proef -t om te weten of alleen het stdout-script wordt uitgevoerd, en zo niet, dan is het duidelijk stdin.

bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Het script in kwestie en zijn outputs ...

Het script in kwestie en zijn outputs ...

Vergeet niet om de opdracht aan te passen en te oefenen, zodat u leert.

stderr: standaardfout

Standaardfout is de manier waarop programma's fouten of diagnoses weergeven. Het wordt vertegenwoordigd door descriptor 2.

Om het concept te begrijpen, is dit de situatie: wanneer we een fout van een commando willen bewaren, is het eerste waar we aan denken om de uitvoer om te leiden naar platte tekst.

ls> info.txt

Dit zou werken, de opdrachtinformatie wordt opgeslagen in een gewoon tekstbestand. Maar wanneer u de fout opslaat, wordt deze niet opgeslagen, maar wordt deze op het scherm weergegeven en is het platte tekstbestand leeg.

Als we in plaats daarvan 2> gebruiken om aan te geven dat we stderr in het bestand moeten opslaan:

ls foo 2> info.txt

Nu slaat het de foutinformatie op in het tekstbestand.

Meest Shell toestaan ​​dat stderr en stdout worden opgeslagen in een enkele opdrachtopdracht met &> waarbij Foo een niet-bestaande map is

ls Downloads Foo &> info.txt

Dit bestand bevat de informatie over de fout bij het draaien van ls op Foo en geeft de mappen weer onder Downloads.

En tot slot, wat doet dat beroemd 2> & 1?

Eenvoudig, redirect stderr naar stdout. Dat & in het midden van> en 1 betekent dat het wordt omgeleid naar stdout. Als het er niet was, zou het zoiets zijn als ... "stuur de fout door naar bestand 1".

En hiermee is het mogelijk om door te verwijzen:

  • stdout naar een bestand
  • stderr naar een bestand
  • stdout naar stderr
  • stderr naar stdout
  • stderr en stdout naar een bestand
  • onder andere

Dat is het voor mensen van vandaag. We lezen en bedanken u voor uw bezoek. 😀


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   eliotime3000 zei

    Interessant. Dankzij jullie tutorials vind ik Bash veel leuker.

  2.   Quincy magoo zei

    Beste, interessant, maar je hebt een fout in de volgende regel:

    "En bij het omleiden van het bestand naar het ls-commando", zou het moeten zijn "en bij het omleiden van het bestand naar het sorteer-commando".

    Een groet.

  3.   Miguel zei

    Er is een fout aan het begin van de tekst, als je het commando "ls" aangeeft, zou het "sort" moeten zijn:
    "Het heeft alle informatie nodig die in de lijst staat - in dit geval de nummers willekeurig geschreven - en bij het omleiden van het bestand naar het ls-commando (hier zou het sorteren)"

    Groeten en bedankt voor het delen van uw werk

  4.   roader zei

    Dit is geweldig voor cron, waar u wilt dat de uitvoer wordt leeggemaakt (/ dev / null) maar dat de fouten worden opgeslagen in bestanden. Wanneer ik dit doe, gebruik ik meestal de opdracht date om precies aan te geven wanneer ze faalden.

    Bash (sh) heeft deze tools zo ontwikkeld door de Unix-filosofie "doe één ding, en doe het goed"

  5.   Lolo zei

    Nou, ik heb niets ontdekt

    1.    Stem zei

      Haha nou het wordt best goed uitgelegd, wat heb je niet begrepen?