Terminal petak: Standardni tok

Dobro došli u još jedan petak…

Vrijeme je da upoznate mali dio terminala. Nakon dugog razmišljanja odlučio sam da napravim post o tome standardni tokovi; Iako će biti površno, mislim da je to nešto što bi svi trebali znati.

Standard Stream

Standard Stream Sastoji se od nekoliko komunikacijskih kanala između korisnika i terminala. Ovi ulazno/izlazni “kanali” prikazuju ili hvataju informacije kada se naredba izvrši.

Brzi dijagram na standardnim tokovima.

Brzi dijagram na standardnim tokovima.

3 I/O konekcije su: stdin Standardni unos, stdout Standardni izlaz, stderr Standardna greška.

stdin:Standardni ulaz

Standardni unos je način na koji prikupljamo informacije iz komande, bilo putem cijevi, preusmjeravanja, tastature itd. Identifikujemo ga sa deskriptorom datoteke 0.

Deskriptor je indikator za pristup - u ovom slučaju - ulaznim i izlaznim kanalima. To su int vrijednosti, obično 0, 1 i 2.

Primjer stdin bi bio:

sortiraj < lista

Uzima sve informacije koje se nalaze na listi - u ovom slučaju brojeve napisane nasumično - i kada preusmjerava datoteku na komandu ls, sortira numeričku listu po abecednom redu. U ovom primjeru indikatori su implicitni.

stdout: Standardni izlaz

Standardni izlaz, kao što mu ime implicira, prikazuje izlaz komande kroz konzolu. Ako napišemo ls, sve informacije koje se prikazuju na ekranu su standardni izlaz. Predstavljen je deskriptorom 1.

Sada ću pokušati da instanciram stdin i stdout sa skriptom napisanom u bash-u, jednostavno zato što volim bash hahaha. 🙂

test.sh

#!/bin/bash ako [ -t 0 ]; zatim echo "Koristite stdout" elif [ -t 1 ]; zatim echo "Koristite stdin" else echo "Brutalna greška" fi

Sada snimak ekrana koji pokazuje kako se koristi skripta. Prilikom preusmjeravanja ili korištenja cijevi sa usa skriptom test -t da znate da li se izvršava samo stdout skripta, a ako ne, to je očigledno stdin.

bash test.sh ls | bash test.sh bash test.sh < /etc/passwd
Skripta o kojoj je riječ i njeni rezultati...

Skripta o kojoj je riječ i njeni rezultati…

Ne zaboravite modificirati naredbu i vježbati kako biste naučili.

stderr: Standardna greška

Standardna greška je način na koji programi prikazuju greške ili dijagnostiku. Predstavljen je deskriptorom 2.

Da bismo razumeli koncept, ovo je situacija: kada želimo da sačuvamo grešku naredbe, prva stvar o kojoj razmišljamo je preusmeravanje izlaza na običan tekst.

ls > info.txt

Ovo bi funkcioniralo, informacije o naredbi će biti pohranjene u običan tekstualni fajl. Ali kada sačuva grešku, ona je ne pohranjuje, već je prikazuje na ekranu i običan tekstualni fajl je prazan.

S druge strane, ako koristimo 2> da naznačimo da sprema stderr u datoteku:

ls foo 2> info.txt

Sada će sačuvati informacije o grešci u tekstualnoj datoteci.

Većina školjka dozvoli pohranjivanje stderr i stdout u jednoj komandi sa &> gdje je Foo nepostojeći direktorij

ls Preuzimanja Foo &> info.txt

Ova datoteka će sadržavati informacije o grešci prilikom izvršavanja ls-a na Foo-u i navesti direktorije unutar preuzimanja.

I na kraju, šta to famozno znači? 2> & 1?

Jednostavno, preusmjerite stderr na stdout. To & između > i 1 znači da će se preusmjeriti na stdout. Da nije bilo, bilo bi nešto poput... "preusmjeri grešku na datoteku 1".

A sa ovim je moguće preusmjeriti:

  • stdout u datoteku
  • stderr u datoteku
  • stdout u stderr
  • stderr u stdout
  • stderr i stdout u datoteku
  • između ostalog

To je sve za današnje ljude. Čitamo se i hvala vam što ste svratili. 😀


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   eliotime3000 rekao je

    Zanimljivo. Zahvaljujući vašim tutorijalima, Bash mi se mnogo više sviđa.

  2.   Quincy magoo rekao je

    Poštovani, zanimljivo, međutim imate grešku u sljedećem redu:

    "i kada preusmjeravate datoteku na naredbu ls", treba biti "i kada preusmjeravate datoteku na komandu sort".

    A pozdrav.

  3.   Miguel rekao je

    Postoji greška na početku teksta, kada navedete komandu "ls", trebalo bi da bude "sort":
    «Uzmite sve informacije koje se nalaze na listi - u ovom slučaju brojevi napisani nasumično - i preusmjerite datoteku na komandu ls (ovdje bi to bilo sortiranje)»

    Pozdrav i hvala na dijeljenju vašeg rada.

  4.   roader rekao je

    Ovo je odlično za cron, gdje želite da se izlaz odbaci (/dev/null), ali da se greške sačuvaju u . Također, kada to radim, obično koristim naredbu date da navedem tačno vrijeme kada nisu uspjeli.

    Bash (sh) ima ove alate tako razvijene od strane Unix filozofije "uradi jednu stvar i uradi to dobro"

  5.   Lolo rekao je

    Pa, nisam ništa saznao

    1.    Glas rekao je

      Haha, dobro je objasnjeno, sta nisi razumeo?