Dobrodošli u još jedan petak ...
Vrijeme je da upoznate maleni dio terminala. Nakon puno razmišljanja odlučio sam stvoriti post o standardni potoci; Iako će to biti površno, mislim da je to nešto što bi svi trebali znati.
Standardni tok
Standardni tok Sastoji se od nekoliko komunikacijskih kanala između korisnika i terminala. Ovi ulazno / izlazni "kanali" prikazuju ili bilježe informacije kada se izvrši naredba.
3 I / O veze su: stdin Standardni ulaz, stdout Standardni izlaz, stderr Standardna pogreška.
stdin: standardni ulaz
Standardni ulaz je način na koji hvatamo podatke iz naredbe bilo putem cijevi, preusmjeravanja, tipkovnice itd. Identificiramo ga s opisom datoteke 0.
Primjer stdina bio bi:
poredati <popis
Uzima sve podatke s popisa - u ovom slučaju brojeve napisane slučajno - i prilikom preusmjeravanja datoteke na naredbu ls sortira numerički popis abecedno. U ovom primjeru zastave su implicitne.
stdout: standardni izlaz
Standardni izlaz, kao što naziv govori, prikazuje izlaz naredbe putem konzole. Ako napišemo jesu li sve informacije koje nam prikazuju na ekranu standardni izlaz. Predstavlja ga deskriptor 1.
Sad ću pokušati stdin i stdout stvoriti skriptom napisanom na bash, jednostavno zato što volim bash hahaha. 🙂
test.sh
#! / bin / bash ako je [-t 0]; zatim odjeknite "Koristite stdout" elif [-t 1]; zatim echo "Koristite stdin" else echo "Brutal error" fi
Sada snimak zaslona koji pokazuje kako se koristi skripta. Pri preusmjeravanju ili korištenju pipe s korištenjem skripte test -t kako bi se znalo izvršava li se samo stdout skripta, a ako nije, očito je stdin.
bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Ne zaboravite izmijeniti naredbu i vježbati kako biste učili.
stderr: Standardna pogreška
Standardna pogreška način je na koji programi prikazuju pogreške ili dijagnostiku. Predstavlja ga deskriptor 2.
Da bismo razumjeli koncept, situacija je takva: kada želimo spasiti pogrešku iz naredbe, prvo na što pomislimo je preusmjeriti izlaz u običan tekst.
ls> info.txt
To bi uspjelo, podaci o naredbi bit će pohranjeni u običnoj tekstualnoj datoteci. Ali prilikom spremanja pogreške, ona je ne pohranjuje, već je prikazuje na zaslonu, a obična tekstualna datoteka je prazna.
Umjesto toga, ako koristimo 2> za označavanje spremanja stderr u datoteku:
ls foo 2> info.txt
Sada će podatke o pogrešci spremiti u tekstualnu datoteku.
Najviše Ljuska dopustiti da se stderr i stdout pohrane u jednu naredbenu naredbu s &> gdje je Foo nepostojeći direktorij
ls Downloads Foo &> info.txt
Ova će datoteka sadržavati informacije o pogrešci prilikom izvršavanja ls u Foou i popis direktorija u odjeljku Preuzimanja.
I na kraju, što to taj poznati ima 2> & 1?
Jednostavno, preusmjerite stderr na stdout. To & usred> i 1 znači da će preusmjeriti na stdout. Da ga nema, bilo bi nešto poput ... "preusmjerite pogrešku u datoteku 1".
A s ovim je moguće preusmjeriti:
- stdout u datoteku
- stderr u datoteku
- stdout do stderr
- stderr u stdout
- stderr i stdout u datoteku
- među ostalima
To je to za današnje ljude. Čitamo i zahvaljujemo što ste navratili. 😀
Zanimljiv. Zahvaljujući vašim vodičima, Bash mi se sviđa mnogo više.
Poštovani, zanimljivo, međutim, u sljedećem retku imate pogrešku:
"A prilikom preusmjeravanja datoteke na naredbu ls", trebalo bi biti "i prilikom preusmjeravanja datoteke na naredbu sortiranja".
Pozdrav.
Na početku teksta postoji pogreška, kada navedete naredbu "ls", trebala bi biti "sortiraj":
"Uzmite sve podatke s popisa - u ovom slučaju brojeve napisane slučajno - i preusmjerite datoteku na naredbu ls (ovdje bi bilo sortiranje)"
Pozdrav i hvala što ste podijelili svoj rad
Ovo je izvrsno za cron, gdje želite da se izlaz ispire (/ dev / null), ali da se pogreške pohranjuju u datoteke. Također, kada to radim, obično koristim naredbu date da bih točno odredio kada nisu uspjeli.
Bash (sh) ima ove alate tako razvijene od strane Unix filozofije "učinite jedno i to dobro"
Pa, nisam ništa saznao
Haha dobro to je prilično dobro objašnjeno, što niste razumjeli?