Tervetuloa toiseen perjantaiin ...
On aika tutustua pieneen osaan terminaalista. Paljon harkittuani päätin luoda viestin aiheesta vakiovirrat; Vaikka se tulee olemaan pinnallinen, mielestäni jokaisen tulisi tietää.
Vakiovirta
Vakiovirta Se koostuu useista viestintäkanavista käyttäjän ja päätelaitteen välillä. Nämä Input / Output-kanavat näyttävät tai sieppaavat tietoja, kun komento suoritetaan.
3 I / O-liitäntää ovat: stdin Normaali tulo, stdout Vakiolähtö, stderr Vakiovirhe.
stdin: Vakiotulo
Vakiotulo on tapa, jolla kaapataan tietoja komennosta joko putkien, uudelleenohjauksen, näppäimistön jne. Kautta. Tunnistamme sen tiedostokuvaimella 0.
Esimerkki stdinistä olisi:
lajittele <listaus
Se vie kaikki luettelossa olevat tiedot - tässä tapauksessa satunnaisesti kirjoitetut numerot - ja kun uudelleenohjataan tiedostoa ls-komentoon, se lajittelee numeerisen luettelon aakkosjärjestyksessä. Tässä esimerkissä liput ovat implisiittisiä.
vakio: vakiolähtö
Tavallinen lähtö, kuten nimestään käy ilmi, näyttää komennon lähdön konsolin kautta. Jos kirjoitamme ls, kaikki tiedot, jotka se näyttää meille näytöllä, ovat vakiotulosteita. Sitä edustaa kuvaaja 1.
Yritän nyt välittää stdin ja stdout komentosarjalla, joka on kirjoitettu bashilla, yksinkertaisesti siksi, että rakastan bash hahahaa. 🙂
test.sh
#! / bin / bash jos [-t 0]; sitten kaiku "Käytät stdoutia" elif [-t 1]; sitten kaiku "Käytät stdin" muuten kaiku "Brutaali virhe" fi
Nyt kuvakaappaus, joka osoittaa komentosarjan käytön. Käytä, kun ohjaat tai käytät putkea komentosarjan kanssa testi -t tietää, suoritetaanko vain stdout-komentosarja, ja jos ei, se on selvästi stdin.
bash testi.sh ls | bash test.sh bash test.sh </ etc / passwd
Muista muokata komentoa ja harjoitella niin, että opit.
stderr: Standardivirhe
Tavallinen virhe on tapa, jolla ohjelmat näyttävät virheitä tai diagnostiikkaa. Sitä edustaa kuvaaja 2.
Käsitteen ymmärtämiseksi tämä on tilanne: kun haluamme tallentaa komentovirheen, ajattelemme ensin lähdön uudelleenohjaamista pelkkään tekstiin.
ls> info.txt
Tämä toimisi, komentotiedot tallennetaan pelkkänä tekstitiedostona. Mutta virhettä tallennettaessa se ei tallenna sitä, mutta se näyttää sen näytöllä ja pelkkätekstitiedosto on tyhjä.
Sen sijaan, jos käytämme 2> osoittamaan tallentamaan stderr tiedostoon:
ls foo 2> info.txt
Nyt se tallentaa virhetiedot tekstitiedostoon.
Eniten Kuori anna stderr ja stdout tallentaa yhteen komentokomentoon &> missä Foo on olematon hakemisto
Lataukset Foo &> info.txt
Tämä tiedosto sisältää virheen tiedot suoritettaessa ls: tä Foo: ssa ja luetteloi hakemistot kohdassa Lataukset.
Ja lopuksi, mitä tuo kuuluisa on 2> & 1?
Yksinkertainen, ohjaa stderr stdout: iin. Se & keskellä> ja 1 tarkoittaa, että se ohjaa stdoutiin. Jos sitä ei olisi, se olisi jotain ... "ohjaa virhe tiedostoon 1".
Ja tämän avulla on mahdollista ohjata uudelleen:
- stdout tiedostoon
- stderr tiedostoon
- vakio peräkkäin
- stderr stdout
- stderr ja stdout tiedostoon
- muun muassa
Se on nykypäivän ihmisille. Luemme ja kiitämme vierailustasi. 😀
Mielenkiintoista. Opetusohjelmiesi ansiosta pidän Bashista paljon enemmän.
Hyvä, mielenkiintoinen, mutta sinulla on virhe seuraavalla rivillä:
"Ja kun uudelleenohjataan tiedosto komentoon ls", sen pitäisi olla "ja kun uudelleenohjataan tiedosto lajittelukomentoon".
Tervehdys.
Tekstin alussa on virhe. Kun ilmoitat komennon "ls", sen on oltava "lajiteltu":
"Ota kaikki luettelossa olevat tiedot - tässä tapauksessa satunnaisesti kirjoitetut numerot - ja ohjaa tiedosto komentoon ls (tässä se olisi lajittelu)"
Terveisiä ja kiitoksia työn jakamisesta
Tämä on hieno cronille, jossa haluat, että ulostulo huuhdellaan (/ dev / null), mutta virheet tallennetaan tiedostoihin. Lisäksi kun teen tämän, käytän yleensä päivämäärä -komentoa määritelläksesi tarkalleen, milloin ne epäonnistuivat.
Bashilla (sh) on nämä Unix-filosofian niin kehittämät työkalut "tee yksi asia ja tee se hyvin"
No en ole saanut selville mitään
Haha, se selitetään melko hyvin, mitä et ole ymmärtänyt?