Terminál piatok: štandardný prúd

Vitajte v ďalší piatok ...

Je čas spoznať malú časť terminálu. Po dlhom premýšľaní som sa rozhodol vytvoriť príspevok o štandardné toky; Aj keď to bude povrchné, myslím si, že je to niečo, čo by mal každý vedieť.

Štandardný stream

Štandardný stream Skladá sa z niekoľkých komunikačných kanálov medzi používateľom a terminálom. Tieto „kanály“ vstupu / výstupu zobrazujú alebo zachytávajú informácie, keď sa vykoná príkaz.

Rýchla schéma štandardných streamov.

Rýchla schéma štandardných streamov.

3 I / O pripojenia sú: stdin Štandardný vstup, stdout Štandardný výstup, stderr Štandardná chyba.

stdin: Štandardný vstup

Štandardným vstupom je spôsob, akým zachytávame informácie z príkazu, a to buď potrubím, presmerovaním, klávesnicou atď. Identifikujeme ho deskriptorom súboru 0.

Deskriptor je indikátor na prístup - v tomto prípade - ku vstupným a výstupným kanálom. Ide o hodnoty int, zvyčajne 0, 1 a 2.

Príklad stdin by bol:

zoradiť <výpis

Berie všetky informácie, ktoré sú na zozname - v tomto prípade náhodne napísané čísla - a pri presmerovaní súboru na príkaz ls zoradí číselný zoznam podľa abecedy. V tomto príklade sú príznaky implicitné.

stdout: Štandardný výstup

Štandardný výstup, ako už z jeho názvu vyplýva, zobrazuje výstup príkazu cez konzolu. Ak napíšeme ls, všetky informácie, ktoré nám zobrazuje na obrazovke, sú štandardným výstupom. Predstavuje ho deskriptor 1.

Teraz sa pokúsim vytvoriť inštanciu stdin a stdout pomocou skriptu napísaného v jazyku bash, jednoducho preto, že milujem bash hahaha. 🙂

test.sh

#! / bin / bash if [-t 0]; potom ozvite „Používate štandardný výstup“ elif [-t 1]; potom echo "Používate stdin" else echo "Brutálna chyba" fi

Teraz snímka obrazovky, ktorá ukazuje, ako sa skript používa. Pri presmerovaní alebo použití kanálu so skriptom použite test -t vedieť, či je vykonaný iba štandardný skript, a ak nie, je to zjavne štandardné.

bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Predmetný skript a jeho výstupy ...

Predmetný skript a jeho výstupy ...

Nezabudnite upraviť príkaz a cvičiť, aby ste sa naučili.

stderr: Štandardná chyba

Štandardná chyba je spôsob, akým programy zobrazujú chyby alebo diagnostiku. Predstavuje ho deskriptor 2.

Aby sme pochopili tento koncept, je to situácia: keď chceme uložiť chybu z príkazu, prvou vecou, ​​o ktorej premýšľame, je presmerovanie výstupu na obyčajný text.

ls> info.txt

Toto by fungovalo, informácie o príkaze sa uložia do súboru vo formáte obyčajného textu. Pri ukladaní chyby sa však neuloží, ale zobrazí sa na obrazovke a súbor vo formáte obyčajného textu je prázdny.

Namiesto toho, ak použijeme 2> na označenie uloženia stderr do súboru:

je foo 2> info.txt

Teraz uloží informácie o chybe do textového súboru.

Väčšina Mušla povoliť ukladanie stderr a stdout do jedného príkazu pomocou príkazu &>, kde Foo je neexistujúci adresár

ls Stiahnutie Foo &> info.txt

Tento súbor bude obsahovať informácie o chybe pri spustení ls na Foo a zoznam adresárov bude uvedený v zozname Na stiahnutie.

A na záver, čo robí ten slávny 2> & 1?

Jednoduché, presmerujte stderr na štandardný výstup. To & v strede> a 1 znamená, že bude presmerovaný na štandardný výstup. Keby tam nebol, bolo by to niečo ako ... "presmerovať chybu na súbor 1".

A s týmto je možné presmerovať:

  • štandardný výstup do súboru
  • stderr do súboru
  • stdout to stderr
  • stderr na stdout
  • stderr a stdout do súboru
  • okrem iného

To je pre dnešných ľudí všetko. Čítame a ďakujeme, že ste sa zastavili. 😀


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   eliotime3000 dijo

    Zaujímavé. Vďaka vašim tutoriálom sa mi Bash páči oveľa viac.

  2.   Quincy magoo dijo

    Vážený, zaujímavé, ale v nasledujúcom riadku máte chybu:

    „A pri presmerovaní súboru na príkaz ls“ by to malo byť „a pri presmerovaní súboru na príkaz na zoradenie“.

    Pozdrav.

  3.   Miguel dijo

    Na začiatku textu je chyba, keď označíte príkaz «ls», mal by to byť «sort»:
    "Vezmite všetky informácie, ktoré sú na zozname - v tomto prípade náhodne napísané čísla - a presmerujte súbor na príkaz ls (tu by to bolo zoradené)"

    Zdravím a ďakujem za zdieľanie vašej práce

  4.   cestár dijo

    To je skvelé pre cron, kde chcete vyprázdniť výstup (/ dev / null), ale chyby uložiť do súborov. Keď to tiež urobím, zvyčajne pomocou príkazu date presne určím, kedy zlyhali.

    Bash (sh) má tieto nástroje tak vyvinuté filozofiou Unixu „urob jednu vec a urob ju dobre“

  5.   Lolo dijo

    No nič som nezistil

    1.    Hlas dijo

      Haha, to je celkom dobre vysvetlené, čomu si nepochopil?