Mirësevini në një të premte tjetër ...
Timeshtë koha për të njohur një pjesë të vogël të terminalit. Pas shumë mendimesh vendosa të krijoj një postim rreth rrjedhat standarde; Edhe pse do të jetë sipërfaqësore, mendoj se është diçka që të gjithë duhet ta dinë.
Rryma standarde
Rryma standarde Ai përbëhet nga disa kanale komunikimi midis përdoruesit dhe terminalit. Këto "kanale" të Input / Output shfaqin ose kapin informacionin kur ekzekutohet një komandë.
3 lidhjet I / O janë: stdin Hyrja standarde, stdout Prodhimi standard, stderr Gabim standard.
stdin: Hyrja standarde
Hyrja standarde është mënyra në të cilën kapim informacionin nga një komandë, qoftë përmes tubave, ridrejtimit, tastierës, etj. Ne e identifikojmë atë me përshkruesin e skedarit 0.
Një shembull i stdin do të ishte:
rendit <renditja
Merr të gjithë informacionin që është në listë - në këtë rast numrat e shkruar rastësisht - dhe kur ridrejton skedarin te komanda ls, ajo rendit listën numerike në mënyrë alfabetike. Në këtë shembull flamujt janë nënkuptuar.
stdout: Dalja standarde
Dalja standarde, siç nënkupton vetë emri i saj, tregon prodhimin e një komande përmes konsolës. Nëse shkruajmë ls të gjithë informacionin që na tregon në ekran është prodhimi standard. Ajo përfaqësohet nga përshkruesi 1.
Tani do të përpiqem të them stdin dhe stdout me një skenar të shkruar në bash, thjesht sepse e dua bash hahaha. 🙂
provë.sh
#! / bin / bash nëse [-t 0]; pastaj jehonë "You are using stdout" elif [-t 1]; atëherë jehona "Ju jeni duke përdorur stdin" tjetër jehonë "Gabim brutal" fi
Tani një pamje e ekranit që demonstron se si të përdoret skenari. Kur ridrejtoni ose përdorni një tub me përdorimin e shkrimit provë -t për të ditur nëse ekzekutohet vetëm skenari stdout, dhe nëse jo është padyshim stdin.
provë bash.sh ls | provë bash.sh provë bash.sh </ etc / passwd
Mos harroni të modifikoni komandën dhe praktikën në mënyrë që të mësoni.
stderr: Gabim standard
Gabimi Standard është mënyra se si programet shfaqin gabime ose diagnostikime. Ajo përfaqësohet nga përshkruesi 2.
Për të kuptuar konceptin, kjo është situata: kur duam të ruajmë një gabim nga një komandë, gjëja e parë që mendojmë është të ridrejtojmë prodhimin në një tekst të thjeshtë.
ls> info.txt
Kjo do të funksiononte, informacioni i komandës do të ruhet në një skedar teksti të thjeshtë. Por kur ruani gabimin, ai nuk e ruan atë, por e tregon atë në ekran dhe skedari i tekstit të thjeshtë është bosh.
Në vend të kësaj nëse përdorim 2> për të treguar ruajtjen e stderr në skedar:
ls foo 2> info.txt
Tani do të ruajë informacionin e gabimit në skedarin e tekstit.
Shumica e Predhë lejoni që stderr dhe stdout të ruhen në një komandë të vetme me &> ku Foo është një direktori jo-ekzistente
ls Shkarkime Foo &> info.txt
Kjo skedar do të përmbajë informacionin e gabimit kur ekzekuton ls në Foo dhe do të rendisë drejtoritë nën Shkarkimet.
Dhe së fundmi, çfarë bën ajo e famshme 2> & 1?
Thjeshtë, ridrejtoni stderr në stdout. Kjo & në mes të> dhe 1 do të thotë se do të ridrejtohet në stdout. Nëse nuk do të ishte aty, do të ishte diçka si ... "ridrejtoni gabimin në skedarin 1".
Dhe me këtë është e mundur të ridrejtoni:
- stdout në një skedar
- stderr në një skedar
- stdout te stderr
- stderr në stdout
- stderr dhe stdout në një skedar
- ndër të tjera
Kjo është ajo për njerëzit sot. Ne lexojmë dhe ju falënderojmë për ndalimin nga. 😀
Interesante. Falë udhëzimeve tuaja, unë po e pëlqej Bashin shumë më tepër.
I dashur, interesant, megjithatë keni një gabim në rreshtin vijues:
"Dhe kur ridrejtoni skedarin te komanda ls", duhet të jetë "dhe kur ridrejtoni skedarin te komanda e llojit".
Një përshëndetje.
Ekziston një gabim në fillim të tekstit, kur ju tregoni komandën "ls", duhet të jetë "lloj":
"Merrni të gjithë informacionin që është në listë - në këtë rast numrat e shkruar në mënyrë të rastësishme - dhe ridrejtoni skedarin te komanda ls (këtu do të ishte lloj)"
Përshëndetje dhe faleminderit për ndarjen e punës tuaj
Kjo është e shkëlqyeshme për cron, ku dëshironi që dalja të skuqet (/ dev / null) por gabimet të ruhen në skedarë. Gjithashtu, kur e bëj këtë, unë zakonisht përdor komandën data për të specifikuar saktësisht kur ato dështuan.
Bash (sh) i ka këto mjete të zhvilluara kaq shumë nga filozofia Unix "bëj një gjë, dhe bëje mirë"
Epo, nuk kam zbuluar asgjë
Haha mirë është shpjeguar mjaft mirë, çfarë nuk keni kuptuar?