Terminal Biyernes: Standard Stream

Maligayang pagdating sa isa pang Biyernes ...

Panahon na upang makilala ang isang maliit na bahagi ng terminal. Pagkatapos ng maraming pag-iisip nagpasya akong lumikha ng isang post tungkol sa karaniwang mga sapa; Bagaman magiging mababaw ito, sa palagay ko ito ay isang bagay na dapat malaman ng lahat.

Karaniwang Stream

Karaniwang Stream Binubuo ito ng maraming mga channel ng komunikasyon sa pagitan ng gumagamit at ng terminal. Ang Input / Output na "mga channel" na ito ay nagpapakita o nakakakuha ng impormasyon kapag ang isang utos ay naisakatuparan.

Mabilis na diagram sa karaniwang mga stream.

Mabilis na diagram sa karaniwang mga stream.

Ang 3 I / O na koneksyon ay: si stdin Karaniwang pag-input, stdout Karaniwang output, stderr Pangunahing error.

stdin: Karaniwang pag-input

Ang karaniwang pag-input ay ang paraan kung saan nakakakuha kami ng impormasyon mula sa isang utos, alinman sa pamamagitan ng mga tubo, pag-redirect, keyboard, atbp. Kinikilala namin ito sa tagapaglarawan ng file na 0.

Ang tagapaglarawan ay isang tagapagpahiwatig upang mai-access sa kasong ito- ang mga input at output channel. Ito ang mga int halaga, karaniwang 0, 1, at 2.

Ang isang halimbawa ng stdin ay:

pag-uri-uriin <listahan

Kinukuha ang lahat ng impormasyon na nasa listahan - sa kasong ito ang mga bilang na isinulat nang sapalaran - at kapag nagre-redirect ng file sa ls command, pinagsasama nito ang listahan ng bilang ayon sa alpabeto. Sa halimbawang ito ay implicit ang mga watawat.

stdout: Karaniwang output

Ang karaniwang output, tulad ng ipinahihiwatig ng pangalan nito, ay nagpapakita ng output ng isang utos sa pamamagitan ng console. Kung isusulat namin ang lahat ng impormasyon na ipinapakita nito sa amin sa screen ay ang karaniwang output. Kinakatawan ito ng tagapaglarawan 1.

Ngayon susubukan kong patunayan ang stdin at stdout sa isang script na nakasulat sa bash, dahil lang sa gusto ko ang bash hahaha. 🙂

pagsubok.sh

#! / bin / bash kung [-t 0]; pagkatapos ay i-echo ang "Gumagamit ka ng stdout" elif [-t 1]; pagkatapos ay i-echo ang "Gumagamit ka ng stdin" iba pa ang echo na "Brutal error" fi

Ngayon ang isang screenshot na nagpapakita kung paano gamitin ang script. Kapag nagre-redirect o gumagamit ng isang tubo gamit ang script pagsubok -t upang malaman kung ang stdout script lamang ang naisakatuparan, at kung hindi ito ay malinaw na stdin.

bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Ang script na pinag-uusapan at ang mga output ...

Ang script na pinag-uusapan at ang mga output ...

Tandaan na baguhin ang utos at pagsasanay upang malaman mo.

stderr: Karaniwang error

Ang Karaniwang Error ay ang paraan ng pagpapakita ng mga error sa mga programa o diagnostic. Kinakatawan ito ng tagapaglarawan 2.

Upang maunawaan ang konsepto, ito ang sitwasyon: kapag nais naming mag-save ng isang error mula sa isang utos, ang unang bagay na iniisip namin ay upang i-redirect ang output sa payak na teksto.

ls> info.txt

Gagana ito, ang impormasyon ng utos ay maiimbak sa isang payak na file ng teksto. Ngunit kapag nai-save ang error, hindi ito nakaimbak nito, ngunit ipinapakita ito sa screen at ang plain text file ay walang laman.

Sa halip kung gagamitin namin ang 2> upang ipahiwatig upang mai-save ang stderr sa file:

ls foo 2> info.txt

Ngayon ay mai-save ang impormasyong error sa text file.

Karamihan ng Talukap ng alimango payagan ang stderr at stdout na maiimbak sa isang solong utos ng utos na may &> kung saan ang Foo ay isang walang direktoryo

ls Downloads Foo &> info.txt

Maglalaman ang file na ito ng impormasyon ng error kapag isinasagawa ang ls sa Foo at ililista ang mga direktoryo sa ilalim ng Mga Pag-download.

At sa wakas, ano ang sikat niyon 2> & 1?

Simple, i-redirect ang stderr sa stdout. Iyon at sa gitna ng> at 1 ay nangangahulugang magre-redirect ito sa stdout. Kung wala ito, magiging isang bagay tulad ng ... "i-redirect ang error sa file na 1".

At kasama nito posible na mag-redirect:

  • stdout sa isang file
  • stderr sa isang file
  • stdout kay stderr
  • stderr to stdout
  • stderr at stdout sa isang file
  • bukod sa iba pa

Iyon lang para sa mga tao ngayon. Nabasa at salamat sa iyong pagtigil. 😀


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   eliotime3000 dijo

    Nakakainteres Salamat sa iyong mga tutorial, mas gusto ko ang Bash.

  2.   Quincy magoo dijo

    Mahal, kawili-wili, subalit mayroon kang isang error sa sumusunod na linya:

    "At kapag nagre-redirect ng file sa utos ng ls", dapat ay "at kapag nagre-redirect ng file sa utos ng pag-uuri".

    Isang pagbati.

  3.   Miguel dijo

    Mayroong isang error sa simula ng teksto, kapag ipinahiwatig mo ang utos na "ls", dapat itong "pag-uuri":
    "Dalhin ang lahat ng impormasyon na nasa listahan - sa kasong ito ang mga bilang na isinulat nang sapalaran - at i-redirect ang file sa ls command (narito ang magiging uri)"

    Pagbati at salamat sa pagbabahagi ng iyong trabaho

  4.   roader dijo

    Mahusay ito para sa cron, kung saan nais mong ma-flush ang output (/ dev / null) ngunit ang mga error ay maiimbak sa mga file. Gayundin, kapag ginawa ko ito, karaniwang ginagamit ko ang utos ng petsa upang tukuyin nang eksakto kung kailan sila nabigo.

    Ang Bash (sh) ay may mga kagamitang ito kaya nabuo ng pilosopiya ng Unix na "gawin ang isang bagay, at gawin itong mabuti"

  5.   Lolo dijo

    Well, wala akong nalaman

    1.    Boses dijo

      Haha mabuti ipinaliwanag ito nang maayos, ano ang hindi mo naintindihan?