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.
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 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
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. 😀
Nakakainteres Salamat sa iyong mga tutorial, mas gusto ko ang Bash.
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.
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
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"
Well, wala akong nalaman
Haha mabuti ipinaliwanag ito nang maayos, ano ang hindi mo naintindihan?